РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
28 of 723 menu

Модификатор async*

Модификатор async* применяется к функции или методу, превращая их в асинхронный генератор. Такая функция возвращает объект Stream, а не Future. Внутри такой функции можно использовать оператор yield для последовательной выдачи значений. Каждое выданное значение попадает в поток по мере его готовности. Функция с модификатором async* может также использовать await для ожидания других асинхронных операций. Параметры функции при этом остаются обычными: вы можете передавать в неё любые аргументы, которые будут доступны внутри тела генератора.

Синтаксис

Stream<Type> functionName(parameters) async* { // тело генератора yield value; }

Пример

Давайте создадим простой асинхронный генератор, который последовательно выдаёт числа от 1 до 3:

Stream<int> generateNumbers() async* { for (int i = 1; i <= 3; i++) { yield i; } } void main() async { await for (int num in generateNumbers()) { print(num); } }

Результат выполнения кода:

1 2 3

Пример

Давайте создадим генератор, который использует await для имитации задержки между выдачей значений:

Stream<String> generateStrings() async* { yield 'abcde'; await Future.delayed(Duration(seconds: 1)); yield '12345'; } void main() async { await for (String str in generateStrings()) { print(str); } }

Результат выполнения кода (с задержкой в 1 секунду между строками):

"abcde" "12345"

Смотрите также

  • модификатор async,
    который помечает функцию как асинхронную
  • оператор await,
    который ожидает завершения асинхронной операции
  • оператор yield,
    который выдаёт значение из генератора
  • модификатор sync*,
    который создаёт синхронный генератор
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить