Задачи на async в Dart. Часть 4
Скомбинируйте Future и Stream: дождитесь Future<List<int>> со списком чисел, затем создайте из него Stream.fromIterable и выведите квадраты чисел через await for.
Сделайте async-функцию Future<String> readTextFile(String path), которая читает файл через File(path).readAsString() из dart:io. Обработайте ошибку, если файла нет.
import 'dart:io';
// подготовьте тестовый файл, например 'data.txt'
Сделайте async-функцию с параллельными запросами через Future.wait: запустите три Future.delayed с разными задержками и выведите все результаты списком.
Обработайте несколько ошибок в async-коде: в Future.wait передайте futures, часть из которых падает. Используйте eagerError: false и/или .catchError, чтобы собрать и успешные, и ошибочные результаты.
Используйте Isolate.run (или Isolate.spawn) для фонового вычисления: посчитайте сумму чисел от 1 до 1000000 в изоляте и верните результат в основной isolate.
import 'dart:isolate';
Сравните Isolate и async/await: напишите два варианта тяжёлого цикла (в изоляте и в обычной async-функции) и кратко опишите, почему изолят не блокирует event loop, а долгий синхронный код в isolate главного потока — блокирует.
Сделайте простой async HTTP-запрос: через пакет http (или HttpClient из dart:io) выполните GET к публичному URL и выведите статус-код и длину тела ответа.
// пример URL:
// https://jsonplaceholder.typicode.com/todos/1
Реализуйте retry-логику для Future: функция Future<T> retry<T>(Future<T> Function() action, {int times = 3}) повторяет action при ошибке до times раз с паузой Future.delayed. Проверьте на функции, которая падает первые два раза.
Комплексная async-задача: параллельно загрузите несколько «ресурсов» через Future.wait, преобразуйте успешные результаты в Stream и запишите их построчно в файл через File.writeAsString.
Итоговая задача на асинхронность в Dart: объедините async/await, Stream, обработку ошибок и тайм-аут .timeout() в одном небольшом сценарии «загрузка → обработка → сохранение».