微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用当前 SynchronizationContext 运行任务不会在等待方法后恢复执行

如何解决使用当前 SynchronizationContext 运行任务不会在等待方法后恢复执行

我需要使用当前的 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) 之后的代码根本没有执行)。似乎在 await 之后它将线程释放到线程池,但是在异步操作完成后 (SavetoDb) 不会继续执行剩余代码

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

解决方法

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

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

var result = await service.AsyncOperation(data);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。