首页 > 解决方案 > 从任务列表中捕获异常

问题描述

我想知道在这样的场景中处理异常的正确方法

---用解决方案更新了代码---

var wt = new List<PendingSettlement>();
var ot = new List<PendingSettlement>();

var otTask = Task.Run(async () => ot = await LoadOtDataAsync().ConfigureAwait(false));
var wtTask = Task.Run(async () => wt = await LoadWtDataAsync().ConfigureAwait(false));
var tasks = new List<Task>
{
    otTask, wtTask
};

try
{
    await Task.WhenAll(tasks);
}
catch
{
    run.WarningMessage = GetInnermostExceptionMessage(wtTask.Exception) + Environment.NewLine + GetInnermostExceptionMessage(otTask.Exception);
    string GetInnermostExceptionMessage(Exception e)
    {
        if (e == null) return string.Empty;
        _logger.LogError(e, e.Message);
        while (e.InnerException != null) e = e.InnerException;
        return e.Message;
    }
}

有没有办法确定哪个内部异常对应于哪个任务?

标签: async-awaittask

解决方案


存储任务(例如var t1 = Task.Run(...);)。然后,您可以使用 查询异常t1.Exception。您可以简单地忽略done.Wait();从那时起获得的异常。我会通过写作done.ContinueWith(_ => { }).Wait();来避免投掷和捕捉。


推荐阅读