级联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/区域性/身份(,则不应使用ConfigureAwait(false)

请记住,此代码:

await MethodAsync().ConfigureAwait(false);

与此代码大致相同:

var task = MethodAsync();
var configuredTask = task.ConfigureAwait(false);
await configuredTask;

换句话说,MethodAsyncConfigureAwait之前被称为。因此,该方法在当前上下文为的情况下被调用,然后在不捕获上下文的情况下等待它返回的任务

相关内容

  • 没有找到相关文章

最新更新