Sea*_*n B 6 task-parallel-library cancellation .net-4.5 cancellation-token
在下面的代码中,a 作为第二个参数CancellationToken传递给.StartNew(,)方法,但只能Action通过lambda中的闭包来使用.那么,通过.StartNew(,)方法的第二个参数传递令牌的目的是什么?
var cts = new CancellationTokenSource();
var token = cts.Token;
Task.Factory.StartNew(() =>
{
while (true)
{
// simulate doing something useful
Thread.Sleep(100);
}
}, token);
Run Code Online (Sandbox Code Playgroud)
StartNew方法在胎面池中计划任务,但由于线程可能不可用,因此不必立即启动它。在等待启动期间,可能会发生取消请求,此后线程池根本不会启动任务。任务启动后,处理任务取消是您的工作。
实际上,CancellationToken传递给Task.Run和的目的Taskfactory.StartNew是允许任务区分因其他任何异常引发的异常而取消CancellationToken.ThrowIfCancellationRequested和失败。
也就是说,如果CancellationToken在开始时传递了传递,则任务的状态为,Cancelled而任何其他异常(甚至来自另一个CancellationToken)会将其设置为Faulted。
另外,如果在任务实际开始之前CancellationToken取消了,则根本不会启动它。
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |