嗨,我正在编写一个 TUI 可执行文件,我在 crossterm::event::EventStream 上使用 tokio::select 来实现非阻塞循环来接收用户键盘/鼠标事件。
同时,我还想创建一个异步任务队列,可以运行一些通用任务:读/写文件、更新数据逻辑、延迟/超时方法。
这里的task这个词类似于C/C++中具有全局上下文的函数指针。
在阅读了一些文档后,我发现 rust 和 tokio 提供了 tokio::task::JoinSet,它可以帮助我创建新的异步任务,并在多个绿色线程中运行它们。也可以中止所有任务,或等待它们完成。
这可能就是我想要的。但我还有1个问题:
JoinSet 不是未来的 Stream,因此我无法在其上使用 tokio::select。那么我怎么知道什么任务完成了呢?
如果我不选择它,但继续创建新任务。它会随着创建的任务而增加内存使用量,并最终导致内存不足并使 TUI 应用程序崩溃吗?
如果有人有同样的问题,请在这里发帖。