在Task.WhenAll中捕获异常

问题描述 投票:0回答:1

类具有异步方法MonitorAsync(),该方法将启动长时间运行的并行操作。我有这些monitors的集合;这些都是按如下步骤开始的:

    internal async Task RunAsync()
    {
        var tasks = monitors.Select((p) => p.Value.MonitorAsync());
        await Task.WhenAll(tasks);
    }

如果monitor掉落,我需要知道(基本上我会再次运行它)。我研究了ContinueWith等等,但是当并行运行一堆异步任务时,如何确保可以确定何时结束?

c# .net task-parallel-library
1个回答
0
投票

如果您想知道一个结局何时结束(并且不影响其他结局),可以使用ContinueWith()。

或者,循环中的WaitAny呢?

while(anyTaskUnfinished){
    await Task.WaitAny(tasks);
}
//Stuff you do after WhenAll() comes here

我不确定您是否必须删除已经完成的任务。或者,如果它等待任何新的完成。

© www.soinside.com 2019 - 2024. All rights reserved.