Что выведет код 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 ошибок.