Выбор ответа 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 секунды:
awaitзапускает все три запроса параллельно - Около 3 секунд: каждый запрос стартует только после предыдущегоправильный ответ
- Около 1 секунды, если на машине больше трёх ядер процессора
- Код не скомпилируется без
Task.WhenAllдля трёх задач
Разбор
Задача стартует в момент вызова метода. Здесь каждый вызов стоит после await предыдущего, поэтому запросы идут по очереди: примерно 3 секунды. Чтобы выполнить параллельно, запускают все три, сохраняют задачи и ждут await Task.WhenAll(t1, t2, t3). Число ядер для I/O-операций не важно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.