Asynchronous WinRT将令牌分配给异步任务
我想知道将令牌分配给异步任务的原因,如下例所示:Asynchronous WinRT将令牌分配给异步任务,asynchronous,windows-runtime,Asynchronous,Windows Runtime,我想知道将令牌分配给异步任务的原因,如下例所示: var ctSource = new CancellationTokenSource(); Task.Factory.StartNew(() => doSomething(), ctSource.Token); MSDN文档除了将令牌分配给任务外,还坚持将令牌传递给正在运行的方法,但在我看来,这是一个不自然的重复 如果将令牌分配给任务,是否意味着ctSource.Cancel()会自动触发任务的taskcancelledeexce
var ctSource = new CancellationTokenSource();
Task.Factory.StartNew(() => doSomething(), ctSource.Token);
MSDN文档除了将令牌分配给任务外,还坚持将令牌传递给正在运行的方法,但在我看来,这是一个不自然的重复
ctSource.Cancel()
会自动触发任务的taskcancelledeexception
操作CanceledException
,并且您的操作()=>doSomething()
永远不会被调用。因此,令牌被传递到工厂,而不是任务。这由StartNew(…)
方法使用
取消令牌
,只知道实现。任务本身不会自动取消。任务中运行的函数负责在请求取消时退出
您是CancellationTokenSource
的所有者。所以把它传给任何需要它的人
Task.Factory.StartNew(() => doSomething(ctSource.Token), ctSource.Token);
如果您不是
doSomething()
(来自第三方DLL)的所有者,则无法取消该操作,除非它接受CancellationToken
谢谢莱思给出如此全面的回答。由于无法使用“wait”指定取消令牌,这是否意味着当我的任务正在等待另一个任务时请求取消时,另一个任务仍将运行到完成,直到我重新获得控制并使用令牌停止线程。ThrowifcCancellationRequested?是的,这完全正确。正在运行的任务将一直运行到完成。完成后,您可以检查标记。ThrowIfCancellationRequested()
。