我在一些地方看到.GetAwaiter().GetResult();
可能导致死锁,我们应该使用async
/ await
代替。但我看到许多代码示例使用它。可以使用它吗?它可能陷入僵局的情况是什么?还有其他我应该使用的东西,比如Task.Wait
?
答案 0 :(得分:36)
正如我在博客中描述的GetAwaiter().GetResult()
can deadlock when it's used in a one-thread-at-a-time context。这在UI线程或ASP.NET上下文中调用时最常见(对于预Core ASP.NET)。
Wait
有同样的问题。适当的解决方法是使用await
,并使调用代码异步。
请注意,控制台应用中的Main
方法是此规则的例外情况;在那里使用是完全合适的。许多代码示例都以这种方式使用它。