代码之家  ›  专栏  ›  技术社区  ›  Anand

从任务列表中捕获异常

  •  2
  • Anand  · 技术社区  · 6 年前

    我想知道在这种情况下如何处理异常

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

    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;
        }
    }
    

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   usr    6 年前

    存储任务(例如 var t1 = Task.Run(...); )然后,可以使用 t1.Exception . 你可以忽略你从中得到的例外 done.Wait(); 然后。我会写的 done.ContinueWith(_ => { }).Wait(); 避免投掷和抓捕。