我想知道在这种情况下如何处理异常
---用解决方案更新了代码---
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; } }
有没有办法找出哪个内部异常对应于哪个任务?
存储任务(例如 var t1 = Task.Run(...); )然后,可以使用 t1.Exception . 你可以忽略你从中得到的例外 done.Wait(); 然后。我会写的 done.ContinueWith(_ => { }).Wait(); 避免投掷和抓捕。
var t1 = Task.Run(...);
t1.Exception
done.Wait();
done.ContinueWith(_ => { }).Wait();