Каждый TraceListener в пространстве имен System.Diagnostics (.NET 4) имеет свойство IsThreadSafe.Инфраструктура .NET Tracing решает использовать блокировку для синхронизации нескольких вызовов к методам TraceListener Trace, основанным на этом свойстве.
Зачем команде BCL помечать DefaultTraceListener как не ThreadSafe?Кажется (из Reflector), что основная логика для слушателя такова:
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
?
Ссылки: