实体框架将(应该)处理跨
await点的线程跳转。如果没有,那是EF中的错误。OTOH
OperationContextScope基于TLS,并且
await不安全。
1.同步API维护您的ASP.NET上下文;这包括诸如用户身份和文化等在处理过程中通常很重要的东西。另外,许多ASP.NET
API都假定它们在实际的ASP.NET上下文中运行(我并不是说仅使用
HttpContext.Current;我是说实际上是假定它
SynchronizationContext.Current是的一个实例
AspNetSynchronizationContext)。
2-3。我使用了直接嵌套在ASP.NET上下文中的我自己的单线程上下文,以尝试使
asyncMVC子操作起作用而不必重复代码。但是,不仅会失去可伸缩性的好处(至少对于请求的那部分而言),而且假设ASP.NET
API在ASP.NET上下文中运行,您还会遇到它们。
因此,我从未在生产中使用这种方法。我只是在必要时使用了同步API。



