写在非async
方法中,这段代码有什么区别......
return MyMethodAsync().Result;
......这个,下面?
var task = MyMethodAsync();
task.Wait();
return task.Result;
也就是说,这两者的行为是否相同?
说第二个片段是否阻止正在执行的线程(非async
方法调用MyMethodAsync()
),而第一个片段是否正确?
答案 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的最佳做法。