Является ли ключевое слово Async await эквивалентом лямбда-выражения ContinueWith?

Не мог бы кто-нибудь быть достаточно любезным, чтобы подтвердить, правильно ли я понял ключевое слово Async await? (Используя версию 3 CTP)

К настоящему моменту я выяснил, что вставка ключевого слова 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"));
79
задан Peter O. 12 January 2013 в 15:47
поделиться