文章探讨了 Rust Future trait 的一个限制:在 future 返回 Poll::Ready 后再次调用 poll() 是未定义行为,通常会导致 panic。作者指出能够复用已完成的 future 很有用,并介绍了 MaybeDone 这个包装器,它通过新增一个 'done' 状态来安全地处理此场景。
背景
Rust 异步生态依赖 Future trait,该 trait 仅定义了两个完成状态(Pending 和 Ready)。当代码意外地对已完成的 future 多次调用 poll 时,这种设计选择可能导致运行时 panic。
- 来源
- Lobsters
- 发布时间
- 2026年10月29日 12:24
- 评分
- 6.0 / 10