Выбор ответа Middle Dart: Future, Stream, изоляты спрашивают часто обновлено

Dart: параллельные запросы

Вопрос

Два независимых запроса по 1 секунде. Какой код выполнится примерно за 1 секунду?

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

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

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

Коротко

Правильный ответ: final r = await Future.wait([getA(), getB()]);. Future.wait получает уже запущенные Future: оба запроса стартуют сразу и ждутся вместе, время около максимума из двух.

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

  1. final a = await getA(); final b = await getB();
  2. final r = await Future.wait([getA(), getB()]);правильный ответ
  3. for (final f in [getA, getB]) { await f(); }
  4. await getA().then((_) => getB());

Разбор

Future.wait получает уже запущенные Future: оба запроса стартуют сразу и ждутся вместе, время около максимума из двух. Последовательные await, цикл с await и цепочка then запускают второй запрос только после первого, итого около 2 секунд. В Dart 3 то же можно записать через record: await (getA(), getB()).wait.

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

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