首页 > 解决方案 > While 循环停止 Timer 运行(Dart)

问题描述

我对飞镖中的while循环有疑问。

这是一段代码:

bool temp = false;
Timer(Duration(milliseconds: 5), () {
    print('In timer:' + temp.toString());
    temp = true;
});
Timer(Duration(milliseconds: 1000), () {
    print('In timer:' + temp.toString());
});

结果正是我所期望的:

false (after 5 ms)
true (after 1 s)

但是当添加while循环时:

bool temp = false;
Timer(Duration(milliseconds: 5), () {
    print('In timer:' + temp.toString());
    temp = true;
});

while (!temp) {}
print('End');

我希望它会像这样打印出控制台:

false
End (immediately after false)

但是一切都停留在 while 循环中,并且计时器似乎不再运行以更新 temp。我可以得到任何解释吗?

标签: flutterdartasynchronouswhile-looptimer

解决方案


您的 while 循环和计时器在同一个隔离区中运行,因此您的 while 循环阻塞了阻止计时器执行的事件循环。

要了解有关事件循环和隔离的更多信息,请参阅官方博客文章旧但详细的文章


推荐阅读