问题描述
我需要使用当前的 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);