@crescent

Почему тут await не ждет?

public async void test()
        {
                await PrintAsync();
                Console.WriteLine("finish");
                Console.ReadKey();
                
        }




        void Print()
        {
            Thread.Sleep(3000);     // имитация продолжительной работы
            Console.WriteLine("Hello METANIT.COM");
        }

        // определение асинхронного метода
        async Task PrintAsync()
        {
            Console.WriteLine("Начало метода PrintAsync"); 
            await Task.Run(() => Print());               
            Console.WriteLine("Конец метода PrintAsync");

        }


Вызываю метод test() и он сразу завершается
А я хочу чтоб сперва выполнился PrintAsync и только после его завершения написалось бы Console.WriteLine("finish");

Как это сделать??
  • Вопрос задан
  • 183 просмотра
Решения вопроса 2
freeExec
@freeExec
Участник OpenStreetMap
Потому что твоя программа завершается ещё до окончания работы таска.
Ответ написан
await ждёт, но ждёт он только внутри test.
То что вызвало test не имеет возможности дождаться, тк test объявлен как async void => вернёт управление сразу же, как только выполнение дойдёт до строчки await Task.Run
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
public class Program {
    static async Task Main(string[] args) {
        Console.WriteLine("Hello, World!");
        var p = new Program();
        await p.Test();
        Console.WriteLine("Конец метода Main");
    }
    public async Task Test() {
        await PrintAsync();
        Console.WriteLine("finish");
        Console.ReadKey();

    }
    void Print() {
        Thread.Sleep(3000); // имитация продолжительной работы
        Console.WriteLine("Hello METANIT.COM");
    }

    async Task PrintAsync() {
        Console.WriteLine("Начало метода PrintAsync");
        await Task.Run(() => Print());
        Console.WriteLine("Конец метода PrintAsync");
    }
}

Все ждет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы