我有列表任务,这些任务做一些不相关的工作。我需要的是显示消息框,以防所有任务都正确完成工作。我尝试了几种方法,但对我来说没有任何效果。最简单的方法是使用
Task continuation = Tasks.WhenAll(tasks);
continuation.ContinueWith(obj => {
show messagebox
});
但 ContinueWith 仍会为所有任务运行,而不仅仅是继续任务。我尝试设置取消标记或使用符号,但任务同时运行,所以它不起作用。
如有任何帮助,我将不胜感激。
最佳答案
ContinueWith still runs for all tasks, not just for continuation task.
这是不正确的。 ContinueWith
将在所有任务执行完毕后运行一次。你可以很容易地模拟这个:
var tasks = new[] { Task.Delay(1000), Task.Delay(2000), Task.Delay(500) };
Task.WhenAll(tasks).ContinueWith(x => Console.WriteLine("Finished"));
Console.Read();
您只会看到“Finished”打印一次。
如果可以的话,我当然更愿意使用 await
而不是附加一个延续:
public async Task FooAsync()
{
var tasks = new[] { Task.Delay(1000), Task.Delay(2000), Task.Delay(500) };
await Task.WhenAll(tasks);
Console.WriteLine("Done").
}
关于c# - 多个任务完成后如何调用一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33347177/