неважно. Я не заметил, что его синглтон является частным и используется внутри методов write и writeline.
=========================================================================================================

я есть многопоточное приложение для сканирования портов, написанное на C #, и я хочу напечатать некоторые вещи как в консоль, так и в файл журнала при запуске приложения. По этой причине у меня есть следующий вспомогательный класс, который прекрасно работает при записи как в файл журнала, так и в консоль.

Проблема заключается в том, что, поскольку мое приложение является многопоточным, иногда я создаю несколько файлов журнала, каждый из которых записывается частично, а иногда выдается исключение, поскольку один поток не может получить доступ к одному и тому же месту для записи, пока он используется другим потоком. Есть ли способ сделать мой выше`Output` класс многопоточный тоже, чтобы избежать вышеупомянутых проблем?

Использование одного файла и`lock` Стратегия должна делать работу:

Проблема здесь идет с общей блокировкой. Если вы используете одну и ту же блокировку для нескольких методов, то блокировка одного метода блокирует и другие методы (в вашем случае`Write` а также`WriteLine`). Это выглядит вполне нормально для меня, поскольку они строго связаны между собой ... но это может создать узкое место, если методы вызываются очень часто. С другой стороны, отдельные блокировки заставляют методы работать независимо, и это еще хуже.

Попробуйте объединить два метода в один следующим образом, чтобы вам не приходилось обрабатывать блокировки для отдельных методов: