Что выведет код Middle Dart: Future, Stream, изоляты обновлено

Dart: Future.wait и порядок результатов

Вопрос

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

Future<String> job(String name, int hops) async {
  for (var i = 0; i < hops; i++) {
    await Future(() {});
  }
  print('готов $name');
  return name;
}

Future<void> main() async {
  final r = await Future.wait([job('a', 2), job('b', 1)]);
  print(r);
}

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

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

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

Коротко

Код выведет: готов b, готов a, [a, b]. Оба задания стартуют сразу. b ждёт одно событие, a два, поэтому b завершается первым и готов b печатается раньше.

Что выведет

готов b
готов a
[a, b]

Разбор

Оба задания стартуют сразу. b ждёт одно событие, a два, поэтому b завершается первым и готов b печатается раньше. Но Future.wait возвращает результаты в порядке переданных Future, а не в порядке завершения: [a, b].

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

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