同步运行异步方法的首选方法是什么?
这就是我目前所做的事情:
void RunSync() {
var task = Task.Run(() => RunAsync());
task.Wait();
}
async Task RunAsync() {
throw Exception("test");
}
我对上述代码的问题是,task.Wait()
会引发AggregateException
而不是RunAsync
抛出的实际异常,这是我更喜欢的。
有没有办法在RunAsync
传播实际例外而不诉诸AggregateException
并展开?
答案 0 :(得分:3)
快速回答:
改变这个:
var task = Task.Run(() => RunAsync());
task.Wait();
到此:
var task = RunAsync();
task.Wait();
您不应该使用Task.Run包装异步方法来运行它。 阅读SO答案&#39;如何从同步上下文&#39;中调用异步方法,例如How would I run an async Task<T> method synchronously?
答案 1 :(得分:0)
要打开AggregateException
,请执行以下操作:
RunAsync().GetAwaiter().GetResult();