我有一个UIO 驱动程序,它在一个所谓的wait_on_complete
函数中轮询文件描述符以等待中断。这是完全同步的,所以会阻塞(有超时)。我想迁移这样的代码wait_on_complete
(async
或者可以很容易地包装以创建有用的Future
),但我不确定最好的策略。
我对选项的想法是:
- Use
mio::Poll
,据我了解,这意味着使用 Tokio 反应器,但我无法在 Tokio ^0.3 中遵循 API。在 Tokio 0.2 中似乎有一些东西,但它们已经消失了(尽管它似乎仍然在代码中 - 这只是缺少文档吗?)。 - 使用
polling
它自己的反应器附带的东西。问题是驱动程序似乎是反应堆的错误位置。 - 在自己的线程中运行同步代码并与
async
通道通信。鉴于其中一个要点async
是正确集成异步 IO,这在架构上似乎是一个糟糕的选择(实际上,IO 非常适合主状态机)。 - 还有一些我不知道的。
(1) 似乎是显而易见的解决方案,但我并不完全清楚如何去做。是否有一些关于创建自己的mio
设备并在 Tokio 运行时中使用它的最新文档?
还有其他我想做的事情错过的方法吗?我是否在考虑中遗漏了什么?