Task.Result跟 Task.GetAwaiter.GetResult()相同吗?怎么选?
作者:依乐祝 原文地址:
https://www.cnblogs.com/yilezhu/p/13168337.html
前几天在用线程池执行一些任务时运到一种情形,就是回调方法中使用到了异步方法,但是回调方法貌似不支持async await
的写法。这时候我应该如何处理呢?是使用Task.Result
来获取返回结果,还是使用GetAwaiter.GetResult()
呢?本文就来探讨下吧。
为此我查找了相关的资料,对它俩的区别做一个简单的总结:
其实这两个使用方式是差不多的。不过,还是有一点小小的区别的:如果任务失败,Task.GetAwaiter().GetResult()
会直接抛出异常,而Task.Result
则会把异常包装在AggregateException
中。从这个角度说Task.GetAwaiter().GetResult()
要优于Task.Result
。毕竟它少了异常的包装操作,即直接抛出异常,而不是把异常包装在AggregateException
中。
总结
通过上述内容的阐述,因此在那些必须对异步任务进行同步阻塞的场景中,我选择使用GetAwaiter().GetResult()
。
评论