【问题标题】:CancellationTokenSource or AutoResetEventCancellationTokenSource 或 AutoResetEvent
【发布时间】:2015-08-27 11:22:07
【问题描述】:

现代 .NET API 使用 CancellationTokenSource 和 CancellationToken 跨线程取消作业。有什么理由使用这些而不是“旧”的 AutoResetEvent 和 ManualResetEvent?我想 CancellationToken 封装了类似的东西,正如它的 WaitHandle 属性所公开的那样。

【问题讨论】:

  • this 的可能重复项

标签: c# .net multithreading


【解决方案1】:

嗯,是的。 CancellationTokenSource 在内部使用 ManualResetEvent 来处理取消事件的报告。

您仍然应该更喜欢使用CancellationTokenSource 来取消某些内容,原因如下:

  1. 名副其实。它取消了东西。这使得阅读更容易,因为从一开始就很清楚这个类的实例的用途。
  2. 许多属于 .NET 框架并且可以取消的类使用CancellationTokenSource。尤其是System.Threading(和子包)中的很多东西
  3. 在使用ManualResetEvent 时,CancellationTokenSource 会在内部进行一些优化。延迟初始化之类的。我希望在某些情况下让它更快一点并且运行开销更少。

【讨论】:

  • ManualResetEvent 很重,所以只有在使用CancellationToken.WaitHandle 时才会创建它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2012-01-22
  • 2011-08-17
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多