Задачи на async в Dart. Часть 2
Сделайте async-функцию, имитирующую загрузку данных через Future.delayed: через 1 секунду верните строку 'данные загружены'.
Сделайте async-функцию с параметром String name, которая через Future.delayed возвращает приветствие 'Привет, $name'.
Сделайте функцию Stream<int> countTo(int n) async*, которая с помощью async* и yield последовательно отдаёт числа от 1 до n с небольшой задержкой.
// пример вызова:
// await for (final value in countTo(5)) {
// print(value);
// }
Создайте Future<String> со значением 'готово' и преобразуйте его в Stream через asStream(). Подпишитесь на поток и выведите единственное событие.
Создайте Completer<int>. Верните completer.future из функции и завершите его вручную через complete(42) (или completeError) после таймера. Дождитесь результата через await.
Сделайте цепочку из нескольких .then(): начните с Future.value(2), удвойте значение, затем возведите в квадрат и выведите итог.
Создайте Future.delayed на 3 секунды и ограничьте ожидание через .timeout(Duration(seconds: 1)). Обработайте TimeoutException и выведите сообщение о тайм-ауте.
Сравните Future.sync(() => 1) и Future.delayed(Duration.zero, () => 1): выведите оба результата и кратко опишите, когда результат доступен синхронно, а когда — в следующем микротаске.
Сделайте async-функцию с несколькими await: последовательно «загрузите» имя, возраст и город (каждый шаг — Future.delayed) и верните итоговую строку профиля.
Итоговая задача: напишите async-функцию, которая параллельно ждёт два Future через Future.wait, затем преобразует результат в Stream через Stream.fromIterable и выводит элементы через await for.