CancellationTokenSource或AutoResetEvent

时间:2015-08-27 11:22:08

标签: c# .net multithreading

现代.NET API使用CancellationTokenSource和CancellationToken来取消跨线程的作业。是否有任何理由使用这些而不是" old" AutoResetEvent和ManualResetEvent?我想,CancellationToken封装了类似的东西,如WaitHandle属性所公开的那样。

1 个答案:

答案 0 :(得分:5)

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

由于以下几个原因,您仍然希望使用CancellationTokenSource取消内容:

  1. 这是正确的名称。它取消了东西。这使得更容易阅读,因为从一开始就清楚这个类的实例用于什么。
  2. 许多属于.NET框架且可以取消的类使用CancellationTokenSource。特别是System.Threading(和子包)
  3. 中的很多东西
  4. 使用ManualResetEvent时,CancellationTokenSource会在内部优化一些事情。懒惰的初始化和这样的事情。我希望使它更快一点,并在某些条件下以更少的开销运行。