You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tokio异步Rust中yield的含义是什么?是否代表函数执行结束并返回值?

关于Tokio中.await交还线程控制权的疑问

在阅读Tokio Rust文档时,文档提到将控制权交还给线程。这是否意味着函数已结束执行并返回了值?

Tokio文档原文翻译:

async fn定义看起来像普通的同步函数,但以异步方式运行。Rust在编译时将async fn转换为异步运行的例程。async fn内的任何.await调用都会将控制权交还给线程。该线程可以在后台处理操作时执行其他工作。

解答:

  • 当然不是,.await交还线程控制权完全不代表async函数已经结束执行或者返回了值。
  • 当async fn里遇到.await时,当前的异步任务会被暂停执行,把线程的控制权交还给Tokio的任务调度器。这时候线程不会闲置,而是可以去处理其他处于等待状态的异步任务。
  • 只有当.await等待的异步操作(比如网络IO完成、定时器超时)真正完成后,Tokio调度器才会把这个暂停的任务重新调度到线程上,从.await的位置继续往下执行,直到整个async fn的逻辑全部跑完,才会返回最终的值。

内容的提问来源于stack exchange,提问作者ParawaPa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:15:49