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

Cya*_*yan 23 c# multithreading asynchronous async-await

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

Ste*_*ary 44

正如我在我的博客中描述的那样,GetAwaiter().GetResult()当它在一个单线程的时间环境中使用时,它会死锁.这在UI线程或ASP.NET上下文(对于预Core ASP.NET)中调用时最常见.

Wait有同样的问题.适当的修复是使用await,并使调用代码异步.

请注意,MainConsole应用程序中的方法是此规则的一个例外; 在那里使用是完全合适的.许多代码示例都以这种方式使用它.

  • "控制台应用程序中的主要方法是此规则的一个例外;它非常适合在那里使用.许多代码示例以这种方式使用它." 这里有一个完美的观点.谢谢! (2认同)
  • @ Steven.Xi:不是一般情况.在特定情况下,可以完成.请参阅https://msdn.microsoft.com/en-us/magazine/mt238404.aspx (2认同)