Registro de vaciado al disco, excepción en VerifyOSHandlePosition

¿Cómo puedo escribir un archivo de registro desde un servicio C # para que se vacíe en el disco de manera oportuna?

Esto es lo que he intentado. En el código de registro, abrí un archivo como este:

var file = return File.Open(name, FileMode.Append, 
                            FileAccess.Write, FileShare.Read);
var writer = new StreamWriter(file);

y le escribió así:

writer.WriteLine(msg);
writer.Flush();
file.Flush();

Sin embargo, el registro no se descargó en el disco de manera oportuna. Así que intenté agregar un temporizador de 5 segundos que hace esto:

[DllImport("kernel32.dll")]
static extern bool FlushFileBuffers(IntPtr hFile);

file.Flush();
var hdl = file.SafeFileHandle;
FlushFileBuffers(hdl.DangerousGetHandle());

Esto parece funcionar, pero a intervalos poco frecuentes obtengo la siguiente excepción:

System.IO.IOException: The OS handle's position is not what FileStream expected. Do not use a handle simultaneously in one FileStream and in Win32 code or another FileStream. This may cause data loss.

at System.IO.FileStream.VerifyOSHandlePosition()

¿Hay una mejor manera de forzar la descarga?

Respuestas a la pregunta(2)

Su respuesta a la pregunta