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
相关产品推荐
相关产品推荐

