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