Это ошибка в версии 9.0.0 SDK, отслеживаемая здесь: https://github.com/Azure/azure-sdk-for-net/issues/6254 С тех пор она была исправлена в версии 9.0.1, теперь доступна для загрузки на NuGet.Версия 8.0.0-preview все еще подвержена этой ошибке на момент написания этой статьи.
Причиной является отсутствие вызова ConfigureAwait(false)
, что приводит к тупику при вызове SDK в контекстеASP.NET classic app.
Эта ошибка влияет только на путь кода, используемый для отправки POST-запросов.Вот почему установка UseHttpGetForQueries
на true
- эффективный обходной путь.Однако это следует использовать только как временное решение, пока исправление не станет доступно, особенно если ваше приложение отправляет очень большие запросы, которые могут не уместиться в строке запроса URL.
Также обратите внимание, что взаимоблокировка возникает только при блокировкеЗадача, возвращаемая из асинхронного метода.Синхронные методы SDK делают это внутренне.В ASP.NET рекомендуется практиковать асинхронность методов контроллера, а также всех вызываемых ими методов, которые могут выполнять ввод / вывод, включая методы пакета поиска Azure Search.Это предотвращает блокировку потоков ОС, что значительно увеличивает масштабируемость вашего приложения.Это также позволяет избежать проблем с возможной тупиковой ситуацией из-за пропущенных вызовов на ConfigureAwait(false)
.