是.GetAwaiter()。GetResult();一般使用安全吗?

时间:2016-08-17 22:07:47

标签: c# multithreading asynchronous async-await

我在一些地方看到.GetAwaiter().GetResult();可能导致死锁,我们应该使用async / await代替。但我看到许多代码示例使用它。可以使用它吗?它可能陷入僵局的情况是什么?还有其他我应该使用的东西,比如Task.Wait

1 个答案:

答案 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方法是此规则的例外情况;在那里使用是完全合适的。许多代码示例都以这种方式使用它。