Я бы пошел на CancellationTokenSource
и используя связанные с ним CancellationToken
как средство сигнализации отмены. Это новое в .Net Framework v4.
Концепция заключается в том, что CancellationTokenSource
просто вызывает Cancel, и ваш код может поделиться CancellationToken
s, на котором вы регулярно проверяете свойство IsCancellationRequested
в нем. Это особенно важно в случае циклов с ограниченным циклом или более длительных операций, чтобы ваш код мог своевременно останавливаться.
Дополнительным бонусом является то, что даже заблокированные потоки, заблокированные из-за ожидания на SemaphoreSlim
, ManualResetEventSlim
могут сигнализировать о постепенном выходе, поскольку эти классы принимают CancellationToken
в своем методе Wait
в .Net Framework. v4
Например, посмотрите на: ManualResetEventSlim.Wait с перегрузками, принимающими CancellationToken
.