异步任务全部处理异常

时间:2019-02-13 15:31:28

标签: c#

我使用Using async/await for multiple tasks作为参考。

public async Task DoWork() {

    int[] ids = new[] { 1, 2, 3, 4, 5 };
    await Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient)));
}

是否有可能在特定索引上捕获异常。像这样,当DoSomething在i上引发异常时,我可以捕获该特定索引吗?

1 个答案:

答案 0 :(得分:0)

一种简单的方法是捕获异常,在异常的数据上插入索引信息,然后重新抛出:

int[] ids = new[] {1, 2, 3, 4, 5};
await Task.WhenAll(ids.Select(i =>
{
    try
    {
        return DoSomething(1, i, null);
    }

    catch (Exception ex)
    {
        ex.Data["FailedIndex"] = i; // Information about failed index
        throw;
    }
}));