This code was posted as answer to Async file writer in .Net 3.5.
How would it be done better using Tasks or new features in .Net 4.5?
public sealed class Logger : IDisposable
{
private delegate void WriteMessage(string message);
private static readonly Logger Instance = new Logger();
private static object Locker = new object();
private static readonly StreamWriter Writer =
new StreamWriter("c:\\temp\\logtester.log", true);
private static bool Disposed;
private Logger()
{
}
~Logger()
{
Dispose(false);
}
public static void Log(string message)
{
WriteMessage action = Instance.MessageWriter;
action.BeginInvoke(message, MessageWriteComplete, action);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private static void Dispose(bool disposing)
{
lock (Locker)
{
if (Disposed)
{
return;
}
if (disposing)
{
if (Writer != null)
{
Writer.Dispose();
}
}
Disposed = true;
}
}
private static void MessageWriteComplete(IAsyncResult iar)
{
((WriteMessage)iar.AsyncState).EndInvoke(iar);
}
private void MessageWriter(string message)
{
lock (Locker)
{
Writer.WriteLine(message);
}
}
}