Почему бы не использовать для этого CancellationToken ? Таким образом вы можете остановить любой метод любым способом. Если у метода есть доступ к CTS
, он может просто вызвать Cancel
, и все методы с CancellationToken
s могут затем завершить sh все, что они делают, и выйти.
В многопоточной среде a SemaphoreSlim может использоваться как ожидаемое событие сброса как средство синхронизации потоков.
Я бы не стал использовать Thread.Abort()
, это хорошо для потоков, которые вы не контролируете. Но если это весь ваш код, и вы его контролируете - всегда лучше просто сигнализировать между потоками и вежливо попросить их завершить работу, что приведет к меньшему количеству неопределенных состояний и поведения позже.
Кстати, просто сделайте либо CancellationTokenSource
доступным для методов, которые должны остановить вызывающий метод, или сделать доступным метод, вызывающий Cancel()
на CTS
. Я часто использовал этот подход в сетевом шлюзе с высокой нагрузкой и в настольном приложении, которое загружало большое количество файлов параллельно. Стоимость его ничтожна. Не бойтесь одноразовых материалов, при правильном использовании они экономят больше времени, чем требуется на обращение с ними.