Dart - ожидание всех асинхронных задач в цикле for

У меня есть список объектов в Dart, и я хочу выполнить асинхронную операцию с каждым из этих объектов. После завершения всех асинхронных операций я хочу выполнить последнюю операцию. В настоящее время я делаю это с помощью кода, который выглядит следующим образом:

for (int i = 0; i < myObjectList.length; i++) {
  await myAsynchronousOperation(myObjectList[i]);
}
doFinalOperation();

Хотя это технически работает, я предполагаю, что это неэффективно, потому что цикл for будет ждать завершения первой асинхронной операции, прежде чем запускать вторую. Итак, насколько я понимаю, мы заканчиваем синхронным запуском асинхронных операций, что не может быть целью асинхронного программирования.

Поэтому мой вопрос заключается в том, можно ли каким-то образом запустить все асинхронные операции сразу, затем дождаться их завершения и, наконец, выполнить последнюю операцию. Заранее спасибо!

1 ответ

Решение

Использовать Future.wait ждать нескольких в полете Futures:

await Future.wait([
  for (int i = 0; i < myObjectList.length; i++)
    myAsynchronousOperation(myObjectList[i]),
]);
doFinalOperation();
Другие вопросы по тегам