Future.wait в Dart
Когда нужны сразу несколько независимых ответов,
каждую async-функцию вызывают без
await - так работа стартует параллельно
в смысле очереди событий. Список Future
передают в Future.wait и один раз ждут
весь набор.
Два числа с короткой паузой в каждой задаче удобно сложить после общего ожидания:
Future<int> left() async {
await Future.delayed(Duration(milliseconds: 50));
return 3;
}
Future<int> right() async {
await Future.delayed(Duration(milliseconds: 50));
return 4;
}
void main() async {
var values = await Future.wait([left(), right()]);
print(values[0] + values[1]);
}
Пока обе функции ждут таймер, они идут одновременно.
В консоли появляется 7 - сумма готовых
чисел, а не время двух пауз подряд.
Тот же прием работает со строками, если каждая функция возвращает свой фрагмент:
Future<String> partA() async => "co";
Future<String> partB() async => "de";
void main() async {
var parts = await Future.wait([partA(), partB()]);
print(parts[0] + parts[1]);
}
Запись Future.wait([one(), two()])
читается как «дождаться и one(), и
two()». Порядок элементов в списке
совпадает с порядком аргументов.
Параллельно получите числа 10 и 25
в двух async-функциях с короткой паузой
Future.delayed в каждой. Выведите их
произведение.
Две задачи возвращают строки "run" и
"ner". Склейте результаты через
Future.wait и напечатайте получившееся
слово.