Task.WaitAll超时时如何获得未完成的任务?

时间:2018-07-19 09:01:00

标签: c# .net task-parallel-library

当使用Task.WaitAll方法同步等待任务数组完成时,可以指定 timeout 以毫秒为单位。达到超时后,WaitAll停止等待并返回false

我想知道是否可以获取超时后未完成的任务的子列表。

1 个答案:

答案 0 :(得分:0)

根据Jeroen Mostert在评论中的建议,当Task.WaitAll在超时后返回false时,我们可以筛选完成的任务。

示例:

var tasks = new task[] 
{
    Task.Run(someMethod),
    Task.Run(someMethod1),
    Task.Run(someMethod2),
    Task.Run(someMethod3),
};

bool allTasksAreCompleted = Task.WaitAll(tasks, 10000);

if (!allTasksAreCompleted)
{
    var incompleteTasks = tasks.Where(t => !t.IsCompleted);
}

如果Task.WaitAll超时,我们将在incompleteTasks变量中获得未完成的任务。