Согласно http://msdn.microsoft.com/en-us/library/ms733025.aspx XmlWriterTraceListener не является потокобезопасным. (Я знаю, что Microsoft.VisualBasic.Logging.FileLogTraceListener есть, но я думаю, что формат XmlWriterTraceListener гораздо читабельнее с помощью Microsoft Service Trace Viewer).Насколько «релевантным» является безопасность, не связанная с потоком XmlWriterTraceListener?
Тем не менее, я использую его только для настольных приложений с потоком пользовательского интерфейса и не более 2 BackgroundWorkers, используя XmlWriterTraceListener как Источник Слушатель в то же время. Насколько «релевантным» является безопасность, не связанная с потоком в этом случае, учитывая влияние производительности? Отслеживание сообщений написано относительно пугающе, т. Е. Не каждую секунду.
Редактировать: Пользовательский интерфейс и рабочий стол (ы) фона используют разные источники трассировки (каждый создает свои собственные). TraceListener (на данный момент FileLogTraceListener, поскольку я был уверен в безопасности потоков) является статическим общедоступным свойством в классе App. Я добавляю его в TraceSources в конструкторах классов, владеющих TraceSource.
«Напуганное» никогда не имеет ничего общего с безопасностью потока. Это просто затрудняет диагностику ошибок. Нет, это не потокобезопасно, и вы * должны * использовать блокировку для предотвращения одновременного вызова нескольких потоков. –
Насколько уместен? Ну, так важно, как вы хотите это сделать. Несмотря на то, что записи происходят «не каждую секунду», все же существует вероятность того, что два потока будут пытаться писать в одно и то же время. Результатом этого будет либо отказ от события, либо отказ приложения, в зависимости от конкретной реализации. Без дополнительных подробностей трудно сказать. – Darek
Спасибо за комментарии. Объяснил немного больше в вопросе. Чтобы сделать его потокобезопасным, мне нужно было бы/создать класс-оболочку, который блокирует прослушиватель во время вызовов метода Trace *? –