Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Непонятно с async-await в C# - 2

31.08.21 10:48
Непонятно с async-await в C# - 2
 
alex445 свой человек
Последний раз изменено 31.08.21 10:50 (alex445)

Удалите эту тему, пожалуйста Непонятно с async-await в C# - Программирование (germany.ru)


Вот задачка - что выведет код? Можно без временных меток (их для удобства просто добавил) - просто в какой последовательности сообщения будут?


class Program
{
    static DateTime _startTime;

    static async Task Main(string[] args)
    {
        _startTime = DateTime.Now;

        var wait1 = Wait1();
        var wait2 = Wait2();
        var wait3 = Wait3();
        await wait1;
        Console.WriteLine("after wait1");
        await wait2;
        Console.WriteLine("after wait2");
        await wait3;
        Console.WriteLine("after wait3");
    }

    static async Task Wait1()
    {
        await Task.Delay(3000);
        Console.WriteLine($"wait1 is ready {(DateTime.Now - _startTime).Seconds}");
    }

    static async Task Wait2()
    {
        await Task.Delay(2000);
        Console.WriteLine($"wait2 is ready {(DateTime.Now - _startTime).Seconds}");
    }

    static async Task Wait3()
    {
        await Task.Delay(1000);
        Console.WriteLine($"wait3 is ready {(DateTime.Now - _startTime).Seconds}");
    } 
}


У меня выводит


wait3 is ready 1

wait2 is ready 2

wait1 is ready 3

after wait1

after wait2

after wait3


и я не понимаю, почему. Я думал, что сообщения должны выводиться в той же последовательности, в которой заканчиваются выполняться таски. Т.е.


wait3 is ready 1

after wait3

wait2 is ready 2

after wait2

wait1 is ready 3

after wait1

 

Перейти на