我在 Dart 的许多地方都使用了 stdout.write() ,以免换行。它工作正常,但最近已从同步更改为异步。我刚刚在 Win7-32 和 Win8-64 上升级到 Dart 28355。
以下描述更改:
“有什么变化?过去,在所有平台上,对 stdout 和 stderr 的写入都是阻塞的。作为清理的一部分,这现在是异步/非阻塞的,就像 dart:io 中的任何其他流一样。我如何更新我的代码?大多数代码应该像以前一样工作,除了调用'exit'时的少数情况:"
我想要实现的一个小例子如下:
import 'dart:io';
main() {
String sCorrectYn;
while (sCorrectYn != "y") {
String sName = fInputString("Enter Name : ");
sCorrectYn = fInputString("Details Correct? (y/n) : ");
}
}
String fInputString(String sPrompt) {
stdout.write("\n$sPrompt");
return stdin.readLineSync().toLowerCase();
}
在win8上运行上面的终端输出如下:
c:\Users\boh\dart-dev1\testpg001>dart testinput001.dart
Enter Name : abcd
n
xxxx
n
zzzz
y
Details Correct? (y/n) :
Enter Name :
Details Correct? (y/n) :
Enter Name :
Details Correct? (y/n) :
c:\Users\boh\dart-dev1\testpg001>
上面发生的情况是,在我最终输入“y”之后出现了所有终端输出,这会终止程序并刷新输出缓冲区(它出现)。第一个终端输出“输入名称:”是唯一应该出现的输出。
似乎标准输出没有“刷新”方法。
我确实在未来使用标准输出进行了实验,但我无法让它正常运行。
我怎样才能让它以所需的方式工作?
以下使用 stdout.write() 也无法按需要工作:
import 'dart:io';
main() {
String sInput;
stdout.write("\nEntry 1 : ");
sInput = stdin.readLineSync();
print("Date Entered (1) was : $sInput");
stdout.write("\nEntry 2 : ");
sInput = stdin.readLineSync();
print("Date Entered (2) was : $sInput");
stdout.write("\nEntry 3 : ");
sInput = stdin.readLineSync();
print("Date Entered (3) was : $sInput");
stdout.write("\nEntry 4 : ");
sInput = stdin.readLineSync();
print("Date Entered (4) was : $sInput");
stdout.write("\nEntry 5 : ");
sInput = stdin.readLineSync();
print("Date Entered (5) was : $sInput");
}
上面的终端显示显示第一行“Entry 1:”仅在使用 stdout.write() 时需要显示的行:
c:\Users\boh\dart-dev1\testpg001>dart testinput003.dart
Entry 1 : aaa
Date Entered (1) was : aaa
bbb
Date Entered (2) was : bbb
ccc
Date Entered (3) was : ccc
ddd
Date Entered (4) was : ddd
eee
Date Entered (5) was : eee
Entry 2 :
Entry 3 :
Entry 4 :
Entry 5 :
c:\Users\boh\dart-dev1\testpg001>