首页 > 解决方案 > Dart await while(true) 但用户无法使用标准输入

问题描述

import 'dart:io';
main() async {
  await loop();
  while(true){
    print('Your input:${stdin.readLineSync()}');
  }
}

loop(){
  print('stuck');
  //Future.delayed(Duration(days:5),(){});//works fine
  //while(true);//does not work
}

为什么在循环()中执行while(true)时用户不能输入任何内容,而不是Future。延迟适用于标准输入?

标签: dart

解决方案


Dart 是单线程的。这意味着一次最多运行一段 Dart 代码(如果有隔离,则按隔离)。

类似代码while(true);是一个永不停止的紧密循环。在循环结束之前,没有其他代码会在同一个隔离中运行,并且循环永远不会结束。这是忙等待,它没有给其他代码运行时间。

你甚至永远不会到达你的代码中调用stdin.readLineSync().

前面什么都不做,因为代码永远不会到达它awaitloop()它呼唤loop并永远停留在那里。

如果你创建一个Future.delayed(...), 那么......它实际上并没有做任何事情。你没有归还它,所以await不会等待它完成。你所做的只是创建一个计时器,创建一个Future对象,当计时器用完时,将会发生一些事情,这将完成未来。如果您返回未来,那么await将等待它。

你想要或期望这段代码做什么?


推荐阅读