使用C#任务,在检查之前需要Wait().Result?

时间:2016-03-11 19:01:14

标签: c# asynchronous task

写在非async方法中,这段代码有什么区别......

return MyMethodAsync().Result;

......这个,下面?

var task = MyMethodAsync();

task.Wait();

return task.Result;

也就是说,这两者的行为是否相同?

说第二个片段是否阻止正在执行的线程(async 方法调用MyMethodAsync()),而第一个片段是否正确?

2 个答案:

答案 0 :(得分:4)

是的,最终结果是一样的: 如果您跋涉,最终可能会调用InternalWait

http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Future.cs,e1c63c9e90fb2f26

答案 1 :(得分:2)

  

说第二个片段不会阻止正在执行的线程(调用MyMethodAsync()的非异步方法),第一个片段是否正确?

任何调用Wait或Result的Task对象都会阻塞正在执行的线程。 实际上不建议使用Wait或Result,因为它可能会给你的应用程序带来死锁。

https://msdn.microsoft.com/en-us/magazine/jj991977.aspx

详细了解使用async await的最佳做法。