Какова основная причина взаимоблокировок, предупреждаемых MVC1000 (использование IHtmlHelper.Partial может привести к взаимоблокировкам приложений ...) - PullRequest
0 голосов
/ 07 июня 2019

При попытке скомпилировать вызов HtmlHelper.Partial в приложении ASP.NET Core MVC я получаю следующее предупреждение:

предупреждение MVC1000: использование IHtmlHelper.Partial может привести к взаимоблокировке приложения,Попробуйте использовать Tag Helper или IHtmlHelper.PartialAsync.

В Интернете есть много советов, которые предлагают следовать этому предупреждению. То, что я ищу, это понять основную причину этого, чтобы я мог видеть, могут ли другие шаблоны кодирования, не использующие HtmlHelper.Partial, привести к подобным проблемам.

Единственное объяснение, которое я 'мы обнаружили, что до сих пор находится в этом заблокированном потоке , в котором говорится, что он связан с занятием "слотов задач", но не вдаваться в подробности.

Я могу представить себе тупиковый случай, когдаКАЖДЫЙ поток пула потоков был заблокирован синхронно, ожидая на некоторых Task, и ни одна из этих задач не могла быть выполнена, потому что они ожидали, чтобы быть запланированными на потоках пула потоков И пул потоков находится на максимальных потоках и не будет выделять больше, но это похоже на то, чтоможет произойти с любым кодом синхронизации по асинхронности и кажется маловероятным с большим количеством макс. потоков, поэтому я предполагаю, что в этом есть что-то большее.

Примечание: Помощник по тегам против помощника по HTML«Использование IHtmlHelper.Partial может привести к взаимоблокировке приложений» упоминает об этом, но больше фокусируется на TagHelpers (s - ответ)

...