Выбор ответа Junior async/await и Task спрашивают часто обновлено

Последовательно или параллельно

Вопрос

Три независимых HTTP-запроса по 1 секунде. Сколько займёт код?

var a = await client.GetStringAsync(url1);
var b = await client.GetStringAsync(url2);
var c = await client.GetStringAsync(url3);

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Около 3 секунд: каждый запрос стартует только после предыдущего. Задача стартует в момент вызова метода.

Варианты ответа

  1. Около 1 секунды: await запускает все три запроса параллельно
  2. Около 3 секунд: каждый запрос стартует только после предыдущегоправильный ответ
  3. Около 1 секунды, если на машине больше трёх ядер процессора
  4. Код не скомпилируется без Task.WhenAll для трёх задач

Разбор

Задача стартует в момент вызова метода. Здесь каждый вызов стоит после await предыдущего, поэтому запросы идут по очереди: примерно 3 секунды. Чтобы выполнить параллельно, запускают все три, сохраняют задачи и ждут await Task.WhenAll(t1, t2, t3). Число ядер для I/O-операций не важно.

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

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

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