【问题标题】:Run task with current SynchronizationContext not resume execution after await methods在等待方法后使用当前 SynchronizationContext 运行任务不恢复执行
【发布时间】:2021-06-20 08:39:12
【问题描述】:

我需要使用当前 SynchronizationContext 运行任务。我使用任务工厂来做:

                   Task.Factory.StartNew(async () =>
                    {
                       ...
                        var result =
                              await service.AsyncOperation(data);
                       ...
    
                    },
                    CancellationToken.None,
                    TaskCreationOptions.None,
                    TaskScheduler.FromCurrentSynchronizationContext());

异步操作方法:

object async AsyncOperation(object data){
...
//some async operation here
await dal.SaveToDb(data);
...
}

问题:
执行await dal.SaveToDb(data); AsyncOperation 方法后没有恢复(dal.SaveToDb(data) 之后的代码根本没有执行)。似乎在等待后它会将线程释放到线程池,但在异步操作完成后(SaveToDb)不会恢复执行剩余代码。

为什么会这样???如果我确实需要使用当前 SynchronizationContext 运行任务,我该如何解决(因为我需要 HttpContext)

【问题讨论】:

    标签: .net asp.net-mvc async-await httpcontext synchronizationcontext


    【解决方案1】:

    如果我确实需要使用当前 SynchronizationContext 运行任务,我该如何解决(因为我需要 HttpContext)

    如果您需要在当前的SynchronizationContext 上运行异步代码,那么根本不要使用TaskFactory.StartNew

    var result = await service.AsyncOperation(data);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 2014-08-17
      相关资源
      最近更新 更多