Взаимоблокировку можно предотвратить двумя способами: использовать ConfigureAwait(false) в WaitAsync (что заставляет await игнорировать его контекст) или же использовать await с вызовом WaitAsync (что превращает Deadlock в async-метод).
Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование
·
Стивен Клири