首页 > 解决方案 > GetAwaiter().GetResult() 与 GetAwaiter()?

问题描述

大多数开发人员都在使用GetAwaiter().GetResult(),我几乎无法在没有部件的情况下挖掘使用它的示例,但是当我们不需要结果时GetResult()使用它是不合逻辑的。GetResult()

是否有理由不只GetAwaiter()在适用时使用?还是我对常见用法的看法是错误的?

标签: c#.net.net-core

解决方案


GetAwaiter()不等待任务,只返回TaskAwater对象,可以通过调用来等待任务GetResult()。所以只打电话GetAwaiter()是没有意义的。正如文档所述,此类仅用于编译器使用,用户不应使用它。Task.Wait()当您想等待任务但不需要结果时,您应该使用, 。但有时用户仍然使用 Task.GetAwaiter().GetResult(),而不是在 try-catch 块中使用 Task.Wait(),因为 Task.GetAwaiter().GetResult() 不会Exception在执行任务时抛出AggregateException并显示更详细的堆栈跟踪,这使得异常处理更容易。


推荐阅读