我正在开发一个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))?
谢谢詹姆
发布于 2020-04-14 16:35:30
每个方法都应该对是否使用ConfigureAwait(false)做出自己的决定。如果该方法需要它的上下文(在本例中是HttpContext.Curent /区域性/标识),那么它不应该使用ConfigureAwait(false)。
请记住,此代码:
await MethodAsync().ConfigureAwait(false);与以下代码大致相同:
var task = MethodAsync();
var configuredTask = task.ConfigureAwait(false);
await configuredTask;换句话说,MethodAsync是在ConfigureAwait之前调用的。因此,使用当前上下文调用该方法,然后等待它返回的任务,而不捕获上下文。
https://stackoverflow.com/questions/61211470
复制相似问题