我正在尝试使while循环使一条语句准确地循环一秒钟,然后语句停止。我已经在DartPad中尝试过此操作,但它崩溃了浏览器窗口。
void main(){
var count = 0.0;
bool flag = true;
Future.delayed(Duration(seconds: 1), (){
flag = false;
});
while (flag){
count++;
}
print(count);
}
我做错什么了吗?
答案 0 :(得分:3)
我喜欢您尝试找出Future
的方式。在我了解这些内容之前,我正是您所在的地方。它有点像线程,但是在某些方面却完全不同。
您编写的Dart代码是单线程的。通过编写Future.delayed
,您没有开始工作。除非您通过从该主函数返回而放开线程,否则它的执行不会发生。
如果Main标记为异步,则不必返回。
两个动作必须“同时”运行,以便能够像您尝试的那样彼此交互。这样做的方法是调用Future.wait
来获得取决于两个期货的期货。 编辑:这两个动作都必须在每个步骤中放开执行,以便另一个可以控制单个线程。因此,如果您有一个循环,则必须对其进行某种await
调用才能使执行其他动作。
这是您的代码的修改版本,对我而言最多为215:
Future main() async {
var count = 0.0;
bool flag = true;
var futureThatStopsIt = Future.delayed(Duration(seconds: 1), (){
flag = false;
});
var futureWithTheLoop = () async {
while (flag){
count++;
print("going on: $count");
await Future.delayed(Duration(seconds: 0));
}
}();
await Future.wait([futureThatStopsIt, futureWithTheLoop]);
print(count);
}