Future.delayed в Dart
Когда нужно подождать, не стоит крутить пустой
цикл. Future.delayed принимает
Duration, откладывает продолжение
async-функции и возвращает управление
очереди событий до срабатывания таймера.
После await выполнение идет со следующей
строки. Проверить это можно на двух метках до
и после паузы:
void main() async {
print("tick");
await Future.delayed(Duration(milliseconds: 100));
print("tock");
}
Между "tick" и "tock" проходит
не меньше заданной задержки. Текущая
async-функция приостановлена, но процесс
не занят бесконечным ожиданием в цикле.
Несколько пауз подряд задают ритм шагам. Каждый
Future.delayed откладывает только текущую
async-функцию:
void main() async {
for (var index = 0; index < 3; index++) {
print(index);
await Future.delayed(Duration(milliseconds: 50));
}
}
В консоли появляются 0, 1 и
2 с промежутками между строками. Так
Future.delayed разносит печать во
времени внутри одной async-функции.
В main с async выведите
"wait", сделайте паузу на 200
миллисекунд и напечатайте "go".
Три раза подряд выведите букву "x",
между строками делая паузу на 30
миллисекунд. Весь цикл разместите в main
с async.