当尝试在ASP.NET Core MVC应用程序中编译对HtmlHelper.Partial
的调用时,出现以下警告:
警告MVC1000:使用IHtmlHelper.Partial可能会导致应用程序死锁。考虑使用Tag Helper或IHtmlHelper.PartialAsync。
在线上有很多建议可以提示此警告。 我正在寻找的根本原因是,这样我就可以查看是否其他未使用HtmlHelper.Partial的编码模式也可能导致类似的问题。
到目前为止,我唯一发现的解释是在this locked thread中,它表示这与占用“任务插槽”有关,但没有详细介绍。
我可以想象一个死锁的情况,其中每个线程池线程都被同步阻塞在某个Task
上等待,而这些任务都无法完成,因为它们正在等待在线程池线程上调度,并且线程池处于最大线程数,并且不会分配更多,但是这似乎在任何异步同步代码中都可能发生,并且在最大线程数较高的情况下似乎不太可能发生,因此我猜测还有更多的东西。
注意:Tag Helper vs HTML Helper "Use of IHtmlHelper.Partial may result in application deadlocks"提到了这一点,但更侧重于TagHelpers(响应也是如此)