Flushing log to disk, exceção em VerifyOSHandlePosition

Como posso gravar um arquivo de log de um serviço C # para que ele seja liberado para o disco em tempo hábi

Aqui está o que eu tentei. No código de log, abri um arquivo como este:

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

e escreveu assim:

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

No entanto, o log não foi liberado para o disco em tempo hábil. Então, tentei adicionar um timer de 5 segundos que faça o seguinte:

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

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

Isso parece funcionar, mas em intervalos pouco frequentes recebo a seguinte exceção:

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()

Existe uma maneira melhor de forçar a descarg

questionAnswers(2)

yourAnswerToTheQuestion