Future.wait
ожидает нескольких фьючерсов в асинхронном режиме, так как в каждом из фьючерсов запускается независимо друг от друга. Напротив, Future.forEach
проведет oop по списку фьючерсов и будет ожидать их в последовательности.
Например, если у вас был следующий список фьючерсов:
var futures = [
Future.delayed(Duration(seconds, 3)).then((_) => print('1')),
Future.delayed(Duration(seconds, 2)).then((_) => print('2')),
Future.delayed(Duration(seconds, 1)).then((_) => print('3')),
];
Вызов Future.wait
в этом списке приведет к следующему выводу:
3 (after 1 second)
2 (after 2 seconds)
1 (after 3 seconds)
Принимая во внимание, что вызов Future.forEach
в списке привел бы к следующему:
1 (after 3 seconds)
2 (after 5 seconds)
3 (after 6 seconds)
Это потому, что wait
запускает их все одновременно, а затем обрабатывает их, поскольку все они разрешаются, в то время как forEach
запускает их по отдельности в порядке и ждет для каждого, чтобы решить перед переходом к следующему.
(Здесь обычный отказ от ответственности, что асинхронное программирование - это не то же самое, что параллельное программирование, и что Dart по своей сути является однопоточным языком, поэтому истинный параллелизм не может быть достигнут только с помощью будущего.)