主要观点:
- 异步代码(
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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。