Task.GetAwaiter (). GetResult (), вызывающий взаимоблокировку в службе Windows - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть приложение, которое интенсивно использует Async / Await.У меня проблема, которую я не могу объяснить.

Я звоню .GetAwaiter().GetResult(), и я захожу в тупик.Я не понимаю, почему, учитывая, что я в Службе Windows, которая не должна иметь SynchronizationContext.Кроме того, я извлек файл дампа из процесса, когда он зависал, открыл его в Visual Studio, и значение System.Threading.SynchronizationContext.Current было null.

Почему это блокирование?Я явно что-то упускаю.

1 Ответ

1 голос
/ 03 апреля 2019

В контексте async / await следует избегать использования GetResult (), доступа к члену Result в Task или вызова метода Wait () для Task. Это блокирует поток, а не только задачу, в результате чего все задачи в этом потоке блокируются и обычно приводят к взаимоблокировке.

Вместо этого вам следует дождаться Задачи. Использование await не блокирует поток, поэтому позволяет завершать другие задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...