Difference between .GetAwaiter() and ConfigureAwait()

本文关键字:ConfigureAwait and between Difference GetAwaiter | 更新日期: 2023-09-27 18:23:36

谁能告诉我GetAwaiter()ConfigureAwait(false)之间的区别。

它们都用于异步方法来解决死锁情况,ConfigureAwait不使用同步上下文即可完成任务。我正在寻找可以使用GetAwaiter()以及使用ConfigureAwait(false)的场景。

听说如果它是我正在构建的库,那么我需要使用ConfigureAwait(false)来生成 Await 任务的可配置可等待对象。我可以在单元测试用例项目中使用ConfigureAwait还是应该使用GetAwaiter() get await 任务。

Difference between .GetAwaiter() and ConfigureAwait()

自 MSDN Docs

Task.GetAwaiter获取用于等待此任务的等待者。在此处和此处查看更多详细信息。

Task.ConfigureAwaiter配置用于等待此任务的等待程序。在此处和此处查看更多详细信息

以下是一些指导:

异步/等待 - 异步编程的最佳实践

还有一个类似的问题:

在不使用 await 的情况下调用异步方法时防止死锁

可以使用 Rx 模拟单元测试中的异步操作。我建议不要在单元测试中使用实际的异步;这会减慢它们的速度并阻止使用这些单元测试。