等待有故障的任务(有异常设置的任务),等待将重新抛出存储的异常.如果存储的异常是AggregateException,它将重新抛出第一个异常并丢弃其余的异常.
我们如何使用等待并同时抛出原始的AggregateException,以免我们不会意外丢失错误信息?
请注意,当然有可能想到这样的hacky解决方案(例如try-catch在等待,然后调用Task.Wait).我真的希望找到一个干净的解决方案.这里最好的做法是什么?
我想到使用一个定制的等待者,但内置的TaskAwaiter包含了很多魔术,我不知道如何完全复制.它在TPL类型上调用内部API.我也不想复制所有这一切.
如果你想玩这个,这是一个简短的重现:
static void Main() { Run().Wait(); } static async Task Run() { Task[] tasks = new[] { CreateTask("ex1"),CreateTask("ex2") }; await Task.WhenAll(tasks); } static Task CreateTask(string message) { return Task.Factory.StartNew(() => { throw new Exception(message); }); }
Run中只抛出两个异常之一.
请注意,Stack Overflow上的其他问题不能解决这个具体问题.建议重复时请小心.