dart - 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 代码(如果有隔离,则按隔离)。
类似代码while(true);
是一个永不停止的紧密循环。在循环结束之前,没有其他代码会在同一个隔离中运行,并且循环永远不会结束。这是忙等待,它没有给其他代码运行时间。
你甚至永远不会到达你的代码中调用stdin.readLineSync()
.
前面什么都不做,因为代码永远不会到达它await
。loop()
它呼唤loop
并永远停留在那里。
如果你创建一个Future.delayed(...)
, 那么......它实际上并没有做任何事情。你没有归还它,所以await
不会等待它完成。你所做的只是创建一个计时器,创建一个Future
对象,当计时器用完时,将会发生一些事情,这将完成未来。如果您返回未来,那么await
将等待它。
你想要或期望这段代码做什么?
推荐阅读
- deployment - Github Actions : 在自托管上结帐最后一个版本
- angularjs - 计算两个日期之间的剩余天数,不包括周末和公共假期
- pip - 无法在 MacBook Air M1 中运行 PIP3
- python - 在 Python 中重命名文件时出现 FileNotFoundError,但文件确实被重命名了
- c - 如果搜索值不存在,需要知道程序是否导致缓冲区越界或无限长搜索
- javascript - selectize.js 选择下拉显示默认打开
- python - 在python中为函数参数设置特定的值范围
- r - 格式化数据表以进行正态性分析和绘图
- kubernetes - 一项服务是否足以容纳 70 个 statefulset/deployments pod?
- json - 在 Terraform 中,如何在请求路径之间使用变量定义 API 网关端点?