【问题标题】:What will happen to the remaining tasks when ContinueWhenAny is invoked?调用 ContinueWhenAny 时剩余的任务会发生什么?
【发布时间】:2014-01-24 19:46:17
【问题描述】:

调用 TaskFactory.ContinueWhenAny(Task[], Action(Task)) 时剩余的任务会发生什么?剩余的任务会被取消还是会在某个特定任务首先完成后在后台运行?如果它们在后台运行,我们如何取消它们?

【问题讨论】:

  • 一般情况下甚至不可能取消Task。只有合作。

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


【解决方案1】:

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

【讨论】:

  • 我们如何取消剩余的任务?
猜你喜欢
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 2014-11-22
  • 1970-01-01
  • 2010-12-15
相关资源
最近更新 更多