调用 TaskFactory.ContinueWhenAny(Task[], Action(Task)) 时剩余的任务会发生什么?剩余的任务会被取消还是会在某个特定任务首先完成后在后台运行?如果它们在后台运行,我们如何取消它们?
问问题
145 次
1 回答
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
必须观察令牌并在令牌更改状态时对其采取行动。
于 2014-01-24T19:50:02.287 回答