【问题标题】:Cascading ConfigureAwait(false), is it necessary?级联ConfigureAwait(false),有必要吗?
【发布时间】:2020-07-27 09:41:45
【问题描述】:

我正在开发一个 MVC5 ASP.NET 应用程序,我有以下问题。

如果我在这样定义的控制器中有一个动作:

public async Task<ActionResult> MyAction()
{
    await MethodAsync().ConfigureAwait(false);
}

那么,如果 MethodAsync 调用另一个异步方法,这样:

public async Task<bool> MethodAsync()
{
    await OtherMethodAsync().ConfigureAwait(false);
}

在 awaited 方法中再次调用 ConfigureAwait(false) 有意义吗?还是我应该使用默认值 (ConfigureAwait(true))?。

谢谢 詹姆

【问题讨论】:

    标签: async-await configureawait


    【解决方案1】:

    每种方法都应自行决定是否使用ConfigureAwait(false)。如果那个方法需要它的上下文(在这种情况下,HttpContext.Curent/culture/identity),那么它不应该使用ConfigureAwait(false)

    记住这段代码:

    await MethodAsync().ConfigureAwait(false);
    

    与这段代码大致相同:

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

    换句话说,MethodAsync 被称为之前 ConfigureAwait。所以该方法被调用with当前上下文,然后它返回的任务被等待没有捕获上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多