结语

Rust的异步模型功能强大,但也引入了额外的复杂性。花时间了解你的工具:深入探索tokio的文档,熟悉其原语,充分利用它。

同时,请记住,语言层面和std级别正在进行工作,以简化和完善Rust的异步故事。由于缺少某些部分,你可能在日常工作中遇到一些棘手的问题。

为了获得相对无痛的异步体验,这里有一些建议:

  • 选择一个运行时并坚持使用。
    某些原语(如定时器、I/O)在运行时之间不可移植。尝试混合运行时可能会给你带来麻烦。试图编写运行时无关的代码可能会显著增加代码库的复杂度。如果可以,尽量避免。
  • 目前还没有稳定的Stream/AsyncIterator接口。
    从概念上讲,AsyncIterator是一个异步产出新项的迭代器。虽然设计工作正在进行中,但尚无共识。如果你使用tokio,请参考tokio_stream作为你的首选接口。
  • 小心缓冲。
    它往往是微妙错误的根源。想了解更多详情,可以查阅"Barbara对抗缓冲流"
  • 异步任务没有类似范围线程的等价物。
    详情请参阅"范围任务三难困境"

不要让这些注意事项吓到你:异步Rust正被大规模有效地应用于诸如AWS、Meta等基础服务中,以驱动核心业务。如果你计划构建Rust网络应用程序,掌握它是必不可少的。