在同一个项目中使用 TaskFriendlySynchronizationContext 与 WebForms 和 WebAPI
UseTaskFriendlySynchronizationContext with WebForms and WebAPI in the same project
我有一个使用 WebForms 的遗留应用程序,我需要对其进行扩展。我为我的新功能合并了 WebAPI。在我开始使用 async await 之前,一切都很好。
在 WebAPI 中,UseTaskFriendlySynchronizationContext = false 将导致 HttpContext 为空。将其设置为 true 可解决此问题。
在 WebForms 中,UseTaskFriendlySynchronizationContext = true 会导致某些页面永远不会 return。就像 IIS 从来没有 return 响应一样。将其设置为 false 可解决此问题。
有没有办法让 WebAPI 为真,WebForms 为假?
不,不可能将其设置为该级别。 ASP.NET 进程中的运行时(技术上是应用程序域)必须只使用一个实现。
我的建议是调查您的 WebForms 代码并确定它与新的 SyncCtx 发生死锁的原因。绝大多数代码应该都可以正常工作,所以那里一定有什么不寻常的地方。
我有一个使用 WebForms 的遗留应用程序,我需要对其进行扩展。我为我的新功能合并了 WebAPI。在我开始使用 async await 之前,一切都很好。
在 WebAPI 中,UseTaskFriendlySynchronizationContext = false 将导致 HttpContext 为空。将其设置为 true 可解决此问题。
在 WebForms 中,UseTaskFriendlySynchronizationContext = true 会导致某些页面永远不会 return。就像 IIS 从来没有 return 响应一样。将其设置为 false 可解决此问题。
有没有办法让 WebAPI 为真,WebForms 为假?
不,不可能将其设置为该级别。 ASP.NET 进程中的运行时(技术上是应用程序域)必须只使用一个实现。
我的建议是调查您的 WebForms 代码并确定它与新的 SyncCtx 发生死锁的原因。绝大多数代码应该都可以正常工作,所以那里一定有什么不寻常的地方。