WinRT将令牌分配给异步任务

时间:2015-09-20 20:48:24

标签: asynchronous windows-runtime

我想知道将令牌分配给异步任务的原因,如下例所示:

  var ctSource = new CancellationTokenSource();
  Task.Factory.StartNew(() => doSomething(), ctSource.Token);

除了将令牌分配给任务外,MSDN文档还坚持将令牌传递给正在运行的方法,但对我而言,它看起来是一种不自然的重复。

  1. 如果为某项任务分配了一个令牌,那么ctSource.Cancel()是否会为该任务自动触发TaskCancelledException

  2. 有没有办法从任务中检索分配的令牌(除了将其作为参数发送)?

  3. 如果这些都没有,那么将令牌分配给任务的原因是什么?

1 个答案:

答案 0 :(得分:1)

  
      
  1. 如果为某个任务分配了一个令牌,那是否意味着,ctSource.Cancel()会自动触发该任务的TaskCancelledException?
  2.   

任务可以随时,现在或以后开始。因此,如果在该任务开始之前令牌发生了取消请求,则调度程序本身将抛出var app = { data1: '' setData1: function(value){ this.data1 = value; } } ,并且永远不会调用您的操作OperationCanceledException。因此,令牌传递给工厂,而不是任务。这由() => doSomething()方法使用。

  
      
  1. 有没有办法从任务中检索分配的令牌(除了将其作为参数发送)?
  2.   

没有。任务不知道StartNew(...),只知道实现。任务不会自动取消。任务中运行的函数负责在请求取消时退出。

您是CancellationToken的所有者。所以把它传递给任何需要它的人。

CancellationTokenSource

如果您不是Task.Factory.StartNew(() => doSomething(ctSource.Token), ctSource.Token); (来自第三方DLL)的所有者,则您无法取消该操作,除非它接受doSomething()

相关问题