0Pricing
Dart Academy · Урок

Future.wait и параллельная работа

Параллельный запуск нескольких Future

«Future.wait и параллельная работа» — бесплатный урок Dart Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.

Последовательное ожидание слишком медленное

При последовательном ожидании каждый Future ждёт завершения предыдущего. Поэтому три вызова длительностью по одной секунде займут всего три секунды.

Запустите их вместе

Сначала запустите независимые асинхронные вызовы, а затем дождитесь их завершения. Они выполняются конкурентно, поэтому общее время определяется самым медленным вызовом, а не их суммой.

Знакомство с Future.wait

Future.wait принимает список Future и возвращает один Future, который завершается после завершения всех элементов.

final results = await Future.wait([a(), b(), c()]);

Результаты сохраняют порядок

Future.wait возвращает список результатов в том же порядке, что и исходные Future, независимо от того, какой из них завершился первым.

final list = await Future.wait([one(), two()]);
print(list[0]); // result of one()

Реальная экономия времени

Три параллельных Future длительностью по одной секунде завершаются примерно за одну секунду, поскольку Future.wait позволяет ожидать их одновременно.

Если один завершается с ошибкой

По умолчанию, если любой Future завершается с ошибкой, Future.wait немедленно завершается с этой ошибкой, даже если остальные ещё выполняются.

Продолжение с eagerError

Передайте eagerError: false, и Future.wait дождётся завершения каждого Future, прежде чем сообщить о первой обнаруженной ошибке.

await Future.wait(tasks, eagerError: false);

Гонка с Future.any

Нужен только самый быстрый результат? Future.any завершается, как только успешно завершается первый Future в списке.

final fastest = await Future.any([mirrorA(), mirrorB()]);

Создание списка

Распространённый приём — применить map к входным данным, чтобы создать список Future, а затем напрямую передать его в Future.wait.

await Future.wait(ids.map(fetchUser));

Конкурентность, а не параллельные потоки

Это конкурентное выполнение в одном изоляте: цикл событий чередует операции ожидания. Для ресурсоёмких вычислений, нагружающих CPU, следует использовать изоляты.

Когда что использовать

Используйте Future.wait, когда нужны все результаты, а Future.any — когда достаточно первого прибывшего результата. ⚖️

Быстрая проверка

Быстрая проверка одновременного запуска Future.

Итоги: параллельные Future

Вы научились перекрывать асинхронную работу с помощью Future.wait, чтобы получить все результаты, использовать Future.any для самого быстрого результата и учитывать поведение ошибок. 🏁

Часто задаваемые вопросы

Урок «Future.wait и параллельная работа» бесплатный?

Да — полный текст урока «Future.wait и параллельная работа» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.

Чему я научусь в уроке «Future.wait и параллельная работа»?

Параллельный запуск нескольких Future Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Dart Academy?

Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Future.wait и параллельная работа»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Dart Academy?

Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Цикл событий и микрозадачи
  2. Создание и ожидание Future
  3. Обработка ошибок в асинхронном коде
  4. Future.wait и параллельная работа
← Назад к Dart Academy