结合 LineSplitter 取消标准输入订阅
Cancel stdin subscription in combination with LineSplitter
我使用 LineSplitter
作为命令行界面,其中每一行都是一个命令:
import "dart:io";
import 'dart:convert';
void main() {
var sub;
sub = stdin.transform(UTF8.decoder).transform(new LineSplitter()).listen((l) {
if (l == "e") {
sub.cancel();
}
print('$l');
});
}
键入 e
和换行符应退出应用程序,因为订阅已取消。但这并没有发生,相反我必须在标准输入中换行。问题似乎是 LineSplitter
,也许它正在等待下一个完整的行,有没有办法 "undo"/"unchain" 转换器以便应用程序退出?
调用 exit
对我来说不是一个选项,因为它会在没有正确清理的情况下立即退出。
我认为 this 问题是相关的,但没有解决。
这是 Windows 上 Dart SDK 中的 io 库的问题,现在应该修复该错误(参见 https://github.com/dart-lang/sdk/issues/22940)
我使用 LineSplitter
作为命令行界面,其中每一行都是一个命令:
import "dart:io";
import 'dart:convert';
void main() {
var sub;
sub = stdin.transform(UTF8.decoder).transform(new LineSplitter()).listen((l) {
if (l == "e") {
sub.cancel();
}
print('$l');
});
}
键入 e
和换行符应退出应用程序,因为订阅已取消。但这并没有发生,相反我必须在标准输入中换行。问题似乎是 LineSplitter
,也许它正在等待下一个完整的行,有没有办法 "undo"/"unchain" 转换器以便应用程序退出?
调用 exit
对我来说不是一个选项,因为它会在没有正确清理的情况下立即退出。
我认为 this 问题是相关的,但没有解决。
这是 Windows 上 Dart SDK 中的 io 库的问题,现在应该修复该错误(参见 https://github.com/dart-lang/sdk/issues/22940)