Нет, это не так, как работает. Асинхронные классы таймера .NET отлично потокобезопасны. Проблема с безопасностью потоков заключается в том, что она не является транзитивным свойством, она не делает код другим кодом, который также выполнен поточно-безопасным. Код, который вы написали, а не программист .NET Framework.
Это такая же проблема с распространенным предположением, что код пользовательского интерфейса Windows в основном небезопасен. Это не так, код внутри Windows отлично потокобезопасен. Проблема заключается в том, что весь код, который работает, является не частью Windows и не написан программистом Microsoft. Всегда есть лот этого кода, вызванный вызовом SendMessage(). Какая программа выполняет собственный код, который написал программист. Или код, который он не писал, как крючок, установленный какой-то утилитой. Код, предполагающий, что программа не затрудняет работу и просто выполняет обработчики сообщений в одном потоке. Обычно он делает, не делая этого, покупает ему лот проблемы.
Такая же проблема с событием System.Timers.Timer.Elapsed и обратным вызовом System.Threading.Timer. Программисты делают лотов ошибок, записывающих этот код. Он работает асинхронно в произвольном потоке threadpool, прикосновение к любой общей переменной действительно требует блокировки для защиты состояния. Очень легко упускать из виду. И что еще хуже, намного хуже, очень легко попасть в груду проблем, когда код снова запустил , прежде чем предыдущий вызов прекратил работу. Запускается, когда интервал таймера слишком низкий или слишком загружена машина. Теперь есть два потока, работающих по тому же коду, что редко приходит к хорошему концу.
Резьба трудно, новости в одиннадцать.
Защита резьбы для каких операций? Вы хотите изменить таймер одновременно? – usr
Нить-безопасность может означать много вещей, поэтому все правы. –
@usr: ну, может быть, я слишком простой, но для меня тип называется потокобезопасным, если любой экземпляр можно использовать из потоков 654139846535821 одновременно, не повреждая его состояние. Если у вас есть другое определение, делитесь им. Спасибо :) – Pragmateek