Подтвердить что ты не робот

Is.GetAwaiter(). GetResult(); безопасный для общего использования?

Я читал в нескольких местах, что .GetAwaiter().GetResult(); может вызвать взаимоблокировки и что мы должны использовать async/await. Но я вижу много примеров кода, где это используется. Можно ли использовать его? В каких случаях он может зайти в тупик? Есть ли что-то еще, что я должен использовать, например Task.Wait?

4b9b3361

Ответ 1

Как я описываю в своем блоге, GetAwaiter().GetResult() может зайти в тупик, когда он используется в контексте с одним потоком по времени. Это чаще всего встречается при вызове потока пользовательского интерфейса или в контексте ASP.NET(для предварительного ядра ASP.NET).

Wait имеет те же проблемы. Соответствующее исправление - использовать await и сделать асинхронный код вызова.

Обратите внимание, что метод Main в консольных приложениях является исключением из этого правила; это очень удобно использовать там. Многие примеры кода используют его таким образом.