任何人都可以告诉我GetAwaiter()
和ConfigureAwait(false)
之间的区别。
它们都在Async方法中用于解决死锁情况,ConfigureAwait
用于完成任务而不使用Synchrnoization上下文。我正在寻找可以使用GetAwaiter()
以及我们使用ConfigureAwait(false)
的方案。
我听说如果它是库我建造然后我需要使用ConfigureAwait(false)
来生成Await任务的可配置等待对象。我可以在Unittest案例项目中使用ConfigureAwait
,还是应该使用等待任务的GetAwaiter()
。
答案 0 :(得分:3)
从MSDN文档中提取
Task.GetAwaiter 获取用于等待此任务的等待者。详情请见here和here。
Task.ConfigureAwaiter 配置用于等待此任务的等待者。详情请见here和here
答案 1 :(得分:2)
以下是一些指导:
Async/Await - Best Practices in Asynchronous Programming
和另一个类似的问题:
Preventing a deadlock when calling an async method without using await
您可以使用Rx来模拟单元测试中的异步操作。我建议不要在单元测试中使用实际的异步;它会减慢它们的速度并阻止使用这些单元测试。