Это не тупик, потому что нет синхронизации SynchronizationContext
, поэтому метод async
возобновляет выполнение в потоке пула потоков, а не в главном потоке.
Соответствующие цитаты из статьи (выделение добавлено):
Вот ситуация: помните из моего вступительного поста, что после того, как вы дождетесь Задачи, когда метод продолжится, он продолжится в контексте.
В первом случае этот контекстявляется контекстом пользовательского интерфейса (который применяется к любому пользовательскому интерфейсу , кроме консольных приложений ).Во втором случае этот контекст является контекстом запроса ASP.NET ...
Для примера пользовательского интерфейса «контекст» - это контекст пользовательского интерфейса;для примера ASP.NET «контекст» - это контекст запроса ASP.NET.Этот тип взаимоблокировки может быть вызван для любого «контекста».
Если вы действительно хотите заблокировать консольное приложение таким образом, вы можете использовать AsyncContext
из моей библиотеки AsyncEx
для установки однопоточного контекста в основной поток вашего Консольного приложения.