"await"之后的代码可以在 ASP.NET 的不同线程中运行吗?



我在这里读到 https://blog.stephencleary.com/2009/10/synchronizationcontext-properties.html ASP.NET 应用程序的执行上下文没有特定的关联线程。这是否意味着 await 之后的代码将(可以(在具有相同上下文的不同线程中执行?在这种情况下,同步执行怎么可能导致死锁?或者 ASP.NET 应用程序不是这种死锁的情况?

提前谢谢。

对于ASP.NET 经典(.NET Framework(,有一个特殊的AspNetSynchronizationContext,延续将回发到原始上下文线程。

ASP.NET 核心没有。如果您检查SynchronizationContext.Current您会发现它设置为null.因此,延续可以自由使用它选择的任何线程,并且在这方面不会遭受经典的死锁


更新

评论中@StephenCleary的一些重大更正

小修正:在经典 ASP.NET上,SynchronizationContext表示请求上下文,而不是特定线程

该方法可以在await后的任何线程池线程上恢复。 发生死锁是因为存在作为该请求一部分的上下文,以确保一次只能有一个线程位于请求上下文

因此,当异步方法准备好恢复时,会占用一个线程线程,该线程进入请求上下文并尝试获取该线程。如果上下文中该任务上存在另一个线程被阻止,则锁已被占用,并且将发生死锁

相关内容

  • 没有找到相关文章

最新更新