1

在以下代码中,CancellationToken作为第二个参数传递给.StartNew(,)方法,但只能通过lambda中的闭包使用Action。那么,通过.StartNew(,)方法的第二个参数传递令牌的目的是什么?将CancellationToken传递给Task.Factory.StartNew()的目的是什么?

var cts = new CancellationTokenSource(); 
var token = cts.Token; 
Task.Factory.StartNew(() => 
{ 
    while (true) 
    { 
     // simulate doing something useful 
     Thread.Sleep(100); 
    } 
}, token); 

回答

2

StartNew方法安排在胎面游泳池的任务,但不是此刻必要的启动,因为线程可能不可用。在等待启动期间,可能会发生取消请求,此后线程池根本不会启动任务。任务开始后,您的任务就是处理取消任务。

1

其实,CancellationToken传递给Task.RunTaskfactory.StartNew的目的是为了让任务区分CancellationToken.ThrowIfCancellationRequested失败因为任何其他异常抛出的异常被取消

也就是说,如果在启动通过CancellationToken两罚全中,任务的状态为Cancelled,而任何其他异常(甚至从另一个CancellationToken)将其设置为Faulted

相关问题