async-await - 级联ConfigureAwait(false),有必要吗?
问题描述
我正在开发一个 MVC5 ASP.NET 应用程序,我有以下问题。
如果我在以这种方式定义的控制器中有一个动作:
public async Task<ActionResult> MyAction()
{
await MethodAsync().ConfigureAwait(false);
}
然后,如果 MethodAsync 调用另一个异步方法,这样:
public async Task<bool> MethodAsync()
{
await OtherMethodAsync().ConfigureAwait(false);
}
在等待的方法中再次调用 ConfigureAwait(false) 是否有意义?还是应该使用默认值 (ConfigureAwait(true))?。
谢谢詹姆
解决方案
每种方法都应自行决定是否使用ConfigureAwait(false)
. 如果该方法需要其上下文(在本例中为HttpContext.Curent
/culture / identity),则不应使用ConfigureAwait(false)
.
请记住,此代码:
await MethodAsync().ConfigureAwait(false);
与此代码大致相同:
var task = MethodAsync();
var configuredTask = task.ConfigureAwait(false);
await configuredTask;
换句话说,MethodAsync
被调用before ConfigureAwait
。所以该方法在当前上下文中被调用,然后它返回的任务被等待而不捕获上下文。
推荐阅读
- javascript - 来自 freeCodeCamp 的“正负前瞻”问题
- javascript - 仅在执行函数时才替代 setInterval 重复间隔
- html - 如何修复重叠的绝对定位
- swift - 当WebView无法返回时如何添加隐藏的返回按钮
- reactjs - 在 React 类中声明方法有什么区别?
- java - 同时更新列表的最佳方法
- python - Python / Pandas:将“年日”整数转换为完整日期
- python - 使用 Python 解析具有多个数组的 JSON 文件
- python - 向端点发送 POST 请求会导致“绑定元素必须是结构”
- r - 如何从R中的栅格中提取单个像素值