C#方法Task.Factory.StartNew
将可选的取消令牌作为第二个参数。在下面的示例代码中,我已经包含了这个论点。我不能得到的是,如果不包含第二个参数,代码仍然有效。显然,即使它没有作为参数传递,该操作也可以访问该令牌。那么传递它作为一个论点的目的是什么?是否存在需要第二个参数的情况,或者微软是否完全没有必要包含此选项?
var cts = new CancellationTokenSource();
var token = cts.Token;
Task.Factory.StartNew(() =>
{
int i = 0;
while (true)
{
token.ThrowIfCancellationRequested();
Console.WriteLine($"{i++}\t");
Thread.Sleep(500);
}
}, token);
Console.ReadKey();
cts.Cancel();
答案 0 :(得分:1)
仅在取消令牌在任务开始执行之前被取消的情况下才有用。如果发生这种情况,那么该任务将永远不会被执行,并将直接标记为已取消,从而节省了一些资源。
答案 1 :(得分:0)
由于stackoverflow低点策略无法发表评论所以写在这里。这个问题在Why does TaskFactory.StartNew receive a CancellationToken中得到了很好的回答,这也恰好是另一个问题的重复。