Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpSmAw 98 of 224 menu
◀ ▶

Цикл await for в Dart

Цикл await for - точка, где описание потока превращается в работу. Пока тело цикла ждет элемент, генератор async* может выполнять код и вызывать yield; когда элементов больше нет, цикл завершается.

Первый запуск можно отметить строкой в начале генератора - она появится только после старта await for:

import 'dart:async'; Stream<int> probe() async* { print('run'); yield 1; } void main() async { await for (int n in probe()) { } }

Метка "run" печатается один раз на один проход. До цикла await for внутренний код потока не трогается.

Повторный вызов той же async*-функции снова входит в тело с нуля. Такой поток называют холодным: он оживает под каждое чтение отдельно:

import 'dart:async'; Stream<int> probe() async* { print('run'); yield 1; } void main() async { await for (int n in probe()) { } await for (int n in probe()) { } }

"run" дважды означает два независимых прохода, а не продолжение прежнего. Общего состояния между чтениями у нового потока нет.

Сделайте поток, который в начале печатает "go" и отдает число 7. Дважды прочитайте его через await for в одной main и убедитесь, что метка повторяется.

Поток отдает две строки "a" и "b". При первом await for выведите каждую букву, при втором вызове функции - только длину строки. Оба чтения должны получить полную пару значений.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить