调用ContinueWhenAny时剩余的任务会发生什么?

时间:2014-01-24 19:46:18

标签: .net task-parallel-library task taskfactory

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

1 个答案:

答案 0 :(得分:3)

其余任务正常运行。第一个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