Что выведет код Senior Dart: Future, Stream, изоляты обновлено
Dart: микрозадачи обгоняют таймер
Вопрос
Что выведет программа? По строке на каждый вывод.
import 'dart:async';
void main() {
var n = 0;
void tick() {
n++;
if (n < 3) scheduleMicrotask(tick);
print('micro $n');
}
Future(() => print('таймер, n = $n'));
scheduleMicrotask(tick);
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: micro 1, micro 2, micro 3, таймер, n = 3. Таймер поставлен раньше, но это событие.
Что выведет
micro 1
micro 2
micro 3
таймер, n = 3
Разбор
Таймер поставлен раньше, но это событие. Микрозадача tick ставит следующую микрозадачу, а очередь микрозадач опустошается полностью, включая добавленные по ходу. Только когда цепочка закончилась, выполняется таймер. Если бы цепочка была бесконечной, таймер и кадры Flutter не выполнились бы никогда.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.