当ContinueWhenAny被调用时,剩下的任务会发生什么?

问题描述:

当TaskFactory.ContinueWhenAny(Task [],Action(Task))被调用时,剩下的任务会发生什么?剩下的任务是否会被取消或者在特定的任务完成后会在后台运行?如果他们在后台运行,我们如何取消他们?当ContinueWhenAny被调用时,剩下的任务会发生什么?

+1

甚至无法取消一般的“任务”。只有它合作。 – usr

其余任务正常运行。当第一个Task完成时触发此延续。

取消余下的任务是这样的:

var tknSource = new CancellationTokenSource(); 
List<Task> tasks = new List<Task>(); 

for(int i = 0; i < 50; i++) 
{ 
    tasks.Add(Task.Run(DoWork(tknSource.Token))); //pass the token to the tasks 
} 

TaskFactory.ContinueWhenAny(tasks.ToArray(), p => tknSource.Cancel()); //requests a cenllation on tasks that are still running 

请注意,您只能要求取消。 DoWork必须在令牌更改状态时观察并采取行动。

Check out the MSDN article on Task Cancellation for more details

+0

我们如何取消剩余的任务? – user3233361

+0

@ user3233361请参阅我的编辑。 – Gusdor