Проблема заключается в вызове .Result
, что, как правило, является плохой практикой, поскольку ее можно избежать.
Когда метод _blobExists
выполняет await
, он уходит, выполняет задание, затем пытается вернуться и возобновить работу. Проблема в том, что ваш предыдущий вызов .Result
заблокировал поток, потому что он ждет, пока _blobExists
завершит получение Result
. Итак, _blobExists
ждет, пока поток освободится, чтобы он мог продолжить выполнение метода и вернуть ваш результат.
Это означает, что в итоге вы получите тупиковый сценарий, оба ждут друг друга.
К счастью, мы можем определить действия контроллера как асинхронные, поэтому изменим сигнатуру метода на:
public async Task<ActionResult> Index(string id, string size)
должен исправить это.
Однако вам все же нужно быть осторожным, если вы не используете .NET Core, вам следует указать, что вам не нужен тот же контекст синхронизации, в противном случае проблема все еще может возникнуть, поместив .ConfigureAwait(false)
на * 1020. * строка.