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

How to get unfinished tasks when Task.WaitAll times out?

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

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

正如Jeroen Mostert在评论中所建议的那样,当Task.WaitAll returns 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变量中获取未完成的任务。