有人能告诉我GetAwaiter()和ConfigureAwait(false)之间的区别吗?
在异步方法中使用这两种方法来解决死锁情况,在不使用同步上下文的情况下使用ConfigureAwait来完成任务。我正在寻找我们可以使用GetAwaiter()的场景以及我们使用ConfigureAwait(false)的场景。
我听说如果它是我正在构建的库,那么我需要使用ConfigureAwait(false)来生成等待任务的可配置可等待对象。我可以在单元测试用例项目中使用ConfigureAwait吗,或者应该使用等待任务的GetAwaiter()。
发布于 2015-11-21 12:09:05
摘自MSDN文档
Task.GetAwaiter获取了一个用于等待此任务的等待器。请参阅更多详细信息here和here。
Task.ConfigureAwaiter配置用于等待此任务的等待器。查看更多详细信息here和here
发布于 2015-11-21 11:11:13
以下是一些指导:
Async/Await - Best Practices in Asynchronous Programming
还有另一个类似的问题:
Preventing a deadlock when calling an async method without using await
您可以使用Rx来模拟单元测试中的异步操作。我建议不要在单元测试中使用真正的异步;这会减慢它们的速度,并不鼓励使用这些单元测试。
https://stackoverflow.com/questions/33835063
复制相似问题