Каждый TraceListener в пространстве имен System.Diagnostics (.NET 4) имеет свойство IsThreadSafe. Инфраструктура .NET Tracing решает использовать блокировку для синхронизации нескольких вызовов методам TraceListener Trace на основе этого свойства.DefaultTraceListener и безопасность потоков
Что необходимо для того, чтобы DefaultTraceListener был отмечен как не ThreadSafe командой BCL? Оказывается (с рефлектором), что основная логика для слушателя это:
private void internalWrite(string message)
{
if (Debugger.IsLogging())
{
Debugger.Log(0, null, message);
}
else if (message == null)
{
SafeNativeMethods.OutputDebugString(string.Empty);
}
else
{
SafeNativeMethods.OutputDebugString(message);
}
}
ли доступ к методу Debugger.Log
или OutputDebugString
строка должна быть синхронизирована?
Ссылки: