gpt4 book ai didi

io - 如何在Dart中使用新的Streams API进行stdin.close()?

转载 作者:行者123 更新时间:2023-12-03 03:47:54 27 4
gpt4 key购买 nike

我要求用户在命令行(dart:io)应用中输入。从用户那里得到答案后,我想退订Stream。然后,稍后,我可能想再次收听(但是使用不同的侦听器,因此pause()resume()对我没有帮助)。

在启动时,我有这个:

cmdLine = stdin
.transform(new StringDecoder());

以后,当我想收集输入信息时:
cmdLineSubscription = cmdLine.listen((String line) {
try {
int optionNumber = int.parse(line);
if (optionNumber >= 1 && optionNumber <= choiceList.length) {
cmdLineSubscription.cancel();
completer.complete(choiceList[optionNumber - 1].hash);
} else {
throw new FormatException("Number outside the range.");
}
} on FormatException catch (e) {
print("Input a number between 1 and ${choiceList.length}, please.");
}
});

这可以按预期工作,但是在程序执行结束时将 stdin保持打开状态。使用以前的API,关闭 stdin就像调用 stdin.close()一样容易。但是,使用新的API, stdinStream,而那些没有 close方法。

我认为我正在做的是关闭(阅读:取消订阅)转换后的流,但保持原始(stdin)流为打开状态。

我对么?如果是这样,如何在程序退出时关闭基础 stdin流?

最佳答案

要关闭stdin,只需取消订阅即可:

cmdLineSubscription.cancel();

这是等效的方法。因此,您的直觉是正确的。我不确定我是否理解这个问题-这种方法是否存在问题?

关于io - 如何在Dart中使用新的Streams API进行stdin.close()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186821/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com