【发布时间】:2019-12-07 04:57:57
【问题描述】:
据我所知,AspNetCore doesn't have SynchronizationContext。
“重新进入”请求上下文涉及许多 管家任务,例如设置 HttpContext.Current 和 当前线程的身份和文化。
所以我创建了一个带有操作的简单 .Net Core Api 项目:
[HttpGet]
[Route("checkVar")]
public async Task<IActionResult> checkVar()
{
Thread.SetData(Thread.GetNamedDataSlot("Random"),4);
await Task.Delay(1000);
var res = Thread.GetData(Thread.GetNamedDataSlot("Random"));
}
令我惊讶的是,res 的值是 4。我很惊讶,因为我相信SetData 是同步上下文的一部分。 (它不应该存在于 asp.net core 中)
更多,当我使用ConfigureAwait(false) 时,我在res 中得到了null。
所以现在我很困惑。因为ConfigureAwaitshouldn't have effect in asp.net core
问题:
如果 asp.net core 没有 SynchronizationContext,那么为什么 4 在 await 之后可用?为什么ConfigureAwait 在非SynchronizationContext 环境下会改变结果?
【问题讨论】:
标签: c# asp.net-core async-await synchronizationcontext