主要观点:在特质(AFITs)中编写异步函数时,多数人不知可直接从方法返回期货,通过示例展示了相关内容。
关键信息:
- 介绍了可直接返回期货的
AsyncIterator
特质及其简单实现。 - 探讨了用手动期货实现天真地支持 AFITs 存在的问题,如中间的
.await
调用可能导致性能问题。 - 说明可直接用手动期货实现支持 AFITs 以避免中间
.await
调用,满足手动控制需求。 - 提及
future::poll_fn
可创建无状态期货,方便编写优化的内联轮询状态机代码。
重要细节: - 在
AsyncIterator
特质中,async fn next
可改为fn next() -> impl Future
直接返回期货。 poll_fn
允许通过FnMut
闭包引用外部状态,重写手动期货实现。- 指出 AFITs 既方便实现又能通过手动轮询状态机实现所需控制,统一了异步特质的设计空间。
- 强调在不同异步特质中,不同层次的抽象都很重要,不应片面选择。
- 感谢 Oli Scherer 去年的交流,使其有信心做出相关论断。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。