Dart 结合LineSplitter取消stdin订阅

Dart 结合LineSplitter取消stdin订阅,dart,dart-io,Dart,Dart Io,我使用LineSplitter作为命令行界面,其中每一行都是一个命令: 导入“dart:io”; 导入“dart:convert”; void main(){ var-sub; sub=stdin.transform(UTF8.decoder).transform(newlinesplitter()).listen((l){ 如果(l=“e”){ sub.cancel(); } 打印(“$l”); }); } 当取消订阅时,键入e和换行符应退出应用程序。但这并没有发生,相反,我必须在stdin

我使用
LineSplitter
作为命令行界面,其中每一行都是一个命令:

导入“dart:io”;
导入“dart:convert”;
void main(){
var-sub;
sub=stdin.transform(UTF8.decoder).transform(newlinesplitter()).listen((l){
如果(l=“e”){
sub.cancel();
}
打印(“$l”);
});
}
当取消订阅时,键入
e
和换行符应退出应用程序。但这并没有发生,相反,我必须在stdin中插入另一行。问题似乎是
行拆分器
,可能它正在等待下一个完整的行,是否有方法“撤消”/“取消锁定”转换器以便应用程序退出

调用
exit
对我来说不是一个选项,因为它会在没有正确清理的情况下立即退出


我认为这个问题是相关的,但并没有解决。

这是Windows上Dart SDK中的io库的一个问题,现在应该修复这个错误(请参阅)

我刚刚尝试了您的代码,它可以正常工作。启动脚本,键入e,输入,然后退出应用程序。Dart 1.9.0-edge.44564,Debian Linux x64似乎只是Windows系统上的一个问题,在LinuxI上可以正常工作。针对Windows问题,我填补了一个问题,但我仍然对一个解决方法感兴趣:实际上调用了行
sub.cancel()
,但程序没有退出。