主要观点:
- 异步代码(
async
)无需整个代码都为异步,而阻塞代码(blocking
)则不同。 - 很多人认为
async
是“泄漏的抽象”,但作者认为非async
代码(阻塞代码)才是真正的泄漏抽象。 - 可以从阻塞代码中调用
async
代码,只需使用block_on
等函数;但对于依赖tokio
的async
代码,需先启动tokio
运行时。 - 相比阻塞代码,
async
代码更可预测,使用阻塞代码时需特别小心,可能需要将其封装在Future
中运行在单独线程。
关键信息和重要细节:
async
代码虽有一些学习成本,但能提供优雅的编程模型,很多程序因人们对其恐惧而未使用。- 常见的
async
库依赖tokio
等重量级 crate,且语言特性需进一步完善。 - 从阻塞代码调用
async
代码时,block_on
函数可将async
函数转换为同步调用,pollster
库也可实现类似功能。 - 对于依赖
tokio
的async
代码,需在main()
中启动tokio
运行时,并在使用tokio
原语的新线程中调用enter()
。 - 阻塞代码的函数签名无法直接表明其运行时间和是否会阻塞,使用时需小心,可能需要封装在
Future
中运行在单独线程。 - 提出一些可能的解决
async
代码泄漏问题的方法,如函数文档中注明是否阻塞等,但都存在困难。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。