2015-08-27 3 views
0

Современные .NET API используют CancellationTokenSource и CancellationToken для отмены заданий по потокам. Есть ли причина использовать их вместо «старого» AutoResetEvent и ManualResetEvent? Я предполагаю, что CancellationToken инкапсулирует что-то похожее, как показано его свойством WaitHandle.CancellationTokenSource или AutoResetEvent

+0

возможно дубликат [это] (http://stackoverflow.com/questions/13476528/stopping-a-thread-manualresetevent-volatile-boolean-or-cancellationtoken) – ntohl

ответ

4

Ну да. CancellationTokenSource использует ManualResetEvent внутренне для обработки отчетов об аннулировании.

Тем не менее, вы должны предпочесть использовать CancellationTokenSource для отмены вещи в течение нескольких причин:

  1. Это право на имя. Он отменяет вещи. Это упрощает чтение, поскольку с самого начала ясно, для чего используется экземпляр этого класса.
  2. Многие из классов, которые являются частью платформы .NET и могут быть отменены, используют CancellationTokenSource. Особенно много вещей в System.Threading (и подпакетах)
  3. При использовании ManualResetEventCancellationTokenSource делает пару вещей, чтобы оптимизировать вещи внутри страны. Ленивая инициализация и такие вещи. I Надеюсь, что делает это немного быстрее и работает с меньшими накладными расходами при некоторых условиях.
+3

'ManualResetEvent' довольно тяжелый, так что это создается только в том случае, если используется «CancellationToken.WaitHandle». –

Смежные вопросы