002 Rust异步编程,async await简单介绍

2022-12-19 0 936

Kozhikode对async/await做单纯如是说,意在让他们有两个单纯的重新认识。

促进作用

async/.await是Rust撰写触发器的内建辅助工具。async将两个标识符块转化成为同时实现了future特点的自动机。

所以,转化成为future后有甚么促进作用呢?标准答案:在并行方式中初始化堵塞表达式(async转化成的表达式)会堵塞整座缓存,但,堵塞的future会空出缓存控股权,容许其他future运转。

部份句法

预备组织工作:命令行Cargo.toml

[dependencies] futures = “0.3.4”建立触发器表达式

建立触发器表达式的句法:

async fn my_function() { println!(“Hello”); }

透过asyncURL,上面的表达式回到两个Future。换言之,上面的表达式同构于如下表所示标识符:

fn my_function() -> impl Future<Output = ()> { async { println!(“Hello”); } }
初始化触发器表达式

上面简如是说了建立触发器表达式的句法,上面他们看下怎样初始化触发器表达式。

(1)透过block_on堵塞初始化

//范例一 use futures::executor; async fn my_function() { println!(“Hello”); } fn main() { let f = my_function(); executor::block_on(f); }

(2)透过.await初始化

//范例二 use futures::{ self, executor}; async fn learn_song() { println!(“Learn song!”); } async fn sing_song() { println!(“Sing song!”); } async fn dance() { println!(“Dance!”); } async fn learn_and_sing_song() { learn_song().await; sing_song().await; } async fn async_main() { let f1 = learn_and_sing_song(); let f2 = dance(); futures::join!(f1, f2); } fn main() { executor::block_on(async_main()); println!(“Hello, world!”); }

说明:

a、在learn_and_sing_song()中,会先执行learn_song(),然后再执行sing_song(),两者按照顺序执行;

b、透过join,能等待多个Future完成;

c、当await发生堵塞时,不会堵塞当前缓存,可以让其他的任务执行(在此范例中,如果在learn_song阻塞,则learn_and_sing_song会空出当前缓存,可以让dance执行)。

总结

本节主要单纯如是说async/await在触发器表达式方面的用法,同时透过sing、song、dance的范例,展示了async的应用。

但,本范例中只是单纯的句法展示,并不能真正达到他们想要的触发器效果。

所以,为甚么无法达到他们想要的效果,请持续关注他们Rust触发器程式设计的学习笔记。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务