【发布时间】:2011-06-26 19:27:58
【问题描述】:
我想安排一个任务在 x 毫秒内开始,并能够在它开始之前(或在任务开始时)取消它。
第一次尝试是这样的
var _cancelationTokenSource = new CancellationTokenSource();
var token = _cancelationTokenSource.Token;
Task.Factory.StartNew(() =>
{
token.ThrowIfCancellationRequested();
Thread.Sleep(100);
token.ThrowIfCancellationRequested();
}).ContinueWith(t =>
{
token.ThrowIfCancellationRequested();
DoWork();
token.ThrowIfCancellationRequested();
}, token);
但我觉得应该有更好的方法,因为这会在睡眠时用完一个线程,在此期间它可以被取消。
我还有哪些其他选择?
【问题讨论】:
-
您最好使用timer。
-
它的开销真的不大,而且读起来非常好(所以它是可维护的)。
-
@Richard 触发几百个任务并不少见。而且这段代码处理不好。
-
计时器可能是更好的选择,但我认为它仍然没有给我一个干净的取消选项。
-
有些定时器,如果不是全部,不保证在定时器停止后不触发Tick事件,所以要小心。
标签: c# .net task-parallel-library