.GetAwaiter()和ConfigureAwait()之间的区别

时间:2015-11-20 19:57:02

标签: c# async-await

任何人都可以告诉我GetAwaiter()ConfigureAwait(false)之间的区别。

它们都在Async方法中用于解决死锁情况,ConfigureAwait用于完成任务而不使用Synchrnoization上下文。我正在寻找可以使用GetAwaiter()以及我们使用ConfigureAwait(false)的方案。

我听说如果它是库我建造然后我需要使用ConfigureAwait(false)来生成Await任务的可配置等待对象。我可以在Unittest案例项目中使用ConfigureAwait,还是应该使用等待任务的GetAwaiter()

2 个答案:

答案 0 :(得分:3)

从MSDN文档中提取

Task.GetAwaiter 获取用于等待此任务的等待者。详情请见herehere

Task.ConfigureAwaiter 配置用于等待此任务的等待者。详情请见herehere

答案 1 :(得分:2)

以下是一些指导:

Async/Await - Best Practices in Asynchronous Programming

和另一个类似的问题:

Preventing a deadlock when calling an async method without using await

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