none
Когда применяются несколько await подряд перед одним вызовом метода, и как это работает?

    Вопрос

  • Доброй ночи!

    Что-то в книге плохо рассказано. Когда и как работает применение нескольких await? Например, await await FooAsync().

    Заранее благодарен.

Все ответы

  • Когда await FooAsync возвращает что-то, что тоже можно ждать (т.е. имеющее метод GetAwaiter). Например, когда FooAsync возвращает Task<Task<string>>.

    Где это можно применить на практике - затрудняюсь сказать. В качестве абсурдного примера - если определить вот такой класс:

    class T : System.Runtime.CompilerServices.INotifyCompletion
    {
                public T GetAwaiter() => this;
                public void OnCompleted(Action continuation) {  }
                public bool IsCompleted => true;
                public T GetResult() => this;
                public static T Foo() => new T();
    }
    То вызов вида "await await await await await await T.Foo();" успешно скомпилируется для любого количества await (но, разумеется, не будет иметь никакого видимого эффекта)