Что выведет код Senior async/await и Task обновлено

await уже завершённой задачи

Вопрос

Что выведет программа (.NET 8)? По строке на каждый вывод.

Console.WriteLine("A");
var t = Compute();
Console.WriteLine("C");
Console.WriteLine(await t);

static async Task<int> Compute()
{
    Console.WriteLine("B");
    await Task.CompletedTask;
    Console.WriteLine("B2");
    return 42;
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: A, B, B2, C, 42. await на уже завершённой задаче не приостанавливает метод: IsCompleted равен true, и выполнение идёт дальше синхронно.

Что выведет

A
B
B2
C
42

Разбор

await на уже завершённой задаче не приостанавливает метод: IsCompleted равен true, и выполнение идёт дальше синхронно. Поэтому B2 печатается до возврата из Compute, раньше C. К моменту await t задача уже завершена с результатом 42.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме