MVC1000警告的死锁的根本原因是什么(使用IHtmlHelper.Partial可能会导致应用程序死锁...)

时间:2019-06-07 14:56:53

标签: .net asynchronous asp.net-core asp.net-core-mvc deadlock

当尝试在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(响应也是如此)

0 个答案:

没有答案