以异常传播的形式同步运行异步任务

时间:2017-03-04 06:48:49

标签: c# async-await

同步运行异步方法的首选方法是什么?

这就是我目前所做的事情:

void RunSync() {
    var task = Task.Run(() => RunAsync());
    task.Wait();
}

async Task RunAsync() {
     throw Exception("test");
}

我对上述代码的问题是,task.Wait()会引发AggregateException而不是RunAsync抛出的实际异常,这是我更喜欢的。

有没有办法在RunAsync传播实际例外而不诉诸AggregateException并展开?

2 个答案:

答案 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();