“等待”之后的代码可以在ASP.NET中的不同线程中运行吗?

丹尼斯·阿列克谢耶夫

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

提前致谢。

一般

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

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


更新资料

@StephenCleary在评论中进行了一些重大更正

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

方法可以在之后的任何线程池线程上恢复await之所以发生死锁,是因为请求上下文中有一个以确保一次仅一个线程位于请求上下文中

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以验证在Mockito中的不同线程中运行的模拟方法?

节点可以在多个线程中运行吗?

c# asp.net - 如何在不同线程中查找当前页面 URL?

当在连续在不同线程中运行并被用户代码关闭的窗体上使用时,TopMost不起作用

UWP 可以在 .NET 中运行吗?

是否可以将对象实例移动到QT项目中不同代码点的不同线程中?

一个类可以为Java中的两个不同线程提供两个运行方法吗?

Python 3.5 asyncio在事件循环中从不同线程中的同步代码执行协程

在不同线程中运行任务

React中setState()之后的代码会运行吗?

多个线程可以在多核处理器中并行运行吗

具有多处理功能的新进程可以在主线程中运行吗?

Google Maps代码可以在Excel的Webbrowser控件中运行吗?

.NET是在新的不同线程池线程上恢复等待继续还是重新使用先前恢复的线程?

在不同线程中运行协程循环

是文件系统在javascript中的不同线程上运行

apache和rails可以在同一服务器上的不同目录中运行吗?

numpy数组可以在GPU中运行吗?

Smalltalk中的块可以自己运行吗?

cppclean 可以在 Windows 中运行吗?

不同的任务可以同时在同一个线程并发运行吗?

C ++ Boost,等待来自不同线程的var init

填充来自View中不同线程中运行的不同API的结果

Java访问不同线程中的对象

从JavaFX中的不同线程更新UI

不同线程中SharedPreference的访问值

从不同线程中的QFile读取

QSqlDatabase不同线程中的并发查询

停止不同线程中的无限循环