SendGrid висит только в веб-приложении (не в консольном приложении) [дубликат]

123
задан Gennady Vanin Геннадий Ванин 30 April 2013 в 12:56
поделиться

1 ответ

Wait и await - в то время как аналогичные концептуально - фактически совершенно разные.

Wait будет синхронно блокироваться, пока задача не завершится. Таким образом, текущий поток буквально заблокирован, ожидая завершения задачи. Как правило, вы должны использовать «async полностью вниз»; то есть не блокируйте код async. В моем блоге я подробно расскажу о , как блокировка в асинхронном коде вызывает deadlock .

await будет асинхронно ждать завершения задачи. Это означает, что текущий метод «приостановлен» (его состояние зафиксировано), и метод возвращает неполную задачу своему вызывающему. Позже, когда выражение await завершается, остальная часть метода запланирована как продолжение.

Вы также упоминали «кооперативный блок», по которому я предполагаю, что вы имеете в виду задачу, которую вы Wait ing может выполняться на ожидающем потоке. Бывают ситуации, когда это может произойти, но это оптимизация. Существует много ситуаций, когда не может , как если бы задача была для другого планировщика, или если она уже запущена или если это некод (например, в вашем примере кода: Wait не может выполнить задачу Delay inline, потому что для нее нет кода).

Вы можете найти полезную async / await ввод .

175
ответ дан Alexei Levenkov 28 August 2018 в 03:35
поделиться