Может ли кто-нибудь быть достаточно любезным, чтобы подтвердить, правильно ли я понял ключевое слово Async await? (Используется версия 3 ОСАГО)
До сих пор я выяснил, что вставка ключевого слова await перед вызовом метода, по сути, делает 2 вещи: A. Он создает немедленный возврат и B. Он создает «продолжение», которое вызывается после завершения вызова асинхронного метода. В любом случае продолжение - это оставшаяся часть блока кода для метода.
Так что мне интересно, являются ли эти два бита кода технически эквивалентными, и если да, означает ли это в основном, что ключевое слово await идентично созданию ContinueWith Lambda (то есть: это в основном ярлык компилятора для одного)? Если нет, то в чем разница?
bool Success =
await new POP3Connector(
"mail.server.com", txtUsername.Text, txtPassword.Text).Connect();
// At this point the method will return and following code will
// only be invoked when the operation is complete(?)
MessageBox.Show(Success ? "Logged In" : "Wrong password");
VS
(new POP3Connector(
"mail.server.com", txtUsername.Text, txtPassword.Text ).Connect())
.ContinueWith((success) =>
MessageBox.Show(success.Result ? "Logged In" : "Wrong password"));
источник
await
прежнему захватывает такSynchronizationContext.Current
же, как и всегда. Но в ASP.NET CoreSynchronizationContext.Current
естьnull
.Это «по сути», но сгенерированный код делает больше, чем просто это. Чтобы получить более подробную информацию о сгенерированном коде, я настоятельно рекомендую серию Eduasync Джона Скита:
http://codeblog.jonskeet.uk/category/eduasync/
В частности, пост №7 рассказывает о том, что генерируется (начиная с CTP 2) и почему, поэтому, вероятно, он отлично подходит для того, что вы ищете в данный момент:
http://codeblog.jonskeet.uk/2011/05/20/eduasync-part-7-generated-code-from-a-simple-async-method/
РЕДАКТИРОВАТЬ: Я думаю, что это будет больше деталей, чем то, что вы ищете из вопроса, но если вам интересно, как выглядят вещи, когда у вас есть несколько ожиданий в методе, это описано в сообщении # 9 :)
http://codeblog.jonskeet.uk/2011/05/30/eduasync-part-9-generated-code-for-multiple-awaits/
источник