.GetAwaiter () .GetResult ();一般使用安全
本文关键字:安全 GetResult GetAwaiter | 更新日期: 2023-09-27 18:02:55
我在一些地方读到.GetAwaiter().GetResult();
可能导致死锁,我们应该使用async
/await
来代替。但是我看到很多代码示例都使用了这个。可以用吗?在哪些情况下会发生死锁?还有什么我应该使用,像Task.Wait
?
正如我在博客中所描述的,GetAwaiter().GetResult()
在一次一个线程的上下文中使用时可能会死锁。这在UI线程或ASP中调用时最常见。.NET上下文(用于pre-Core ASP.NET)
Wait
也有同样的问题。适当的修复是使用await
,并使调用代码异步。
请注意,控制台应用程序中的Main
方法是此规则的例外;在那里使用是非常合适的。许多代码示例都这样使用它。
在考虑这些事情时,查看官方文档总是有帮助的。在备注部分,您将看到如下内容:
此方法用于编译器使用;不要直接用在你的代码。
我认为这给了一个相当强的转向。它基本上是给。net开发者一个许可证,允许他们在未来改变它的工作方式。他们可能永远不会这样做,但我自己也不会有信心。至于你还应该使用什么,这取决于上下文,但async/await是最有可能的选择。