美文网首页
rust中的异步编程

rust中的异步编程

作者: 梁帆 | 来源:发表于2021-11-01 08:55 被阅读0次

    tokio的官方文档地址:https://tokio.rs/tokio/tutorial

    一、tokio依赖

    这里我们采用的tokio异步框架,首先,在Cargo.toml中导入tokio的dependecies:

    [dependencies]
    tokio = { version = "1", features = ["full"] }
    

    二、多线程执行

    use std::{thread, time};
    
    #[tokio::main]
    async fn main() {
        let t1 = tokio::spawn(async {
           for i in 0..10 {
               thread::sleep(time::Duration::from_millis(1000));
               println!("thread 1");
           } 
        });
    
        let t2 = tokio::spawn(async {
            for i in 0..10 {
               thread::sleep(time::Duration::from_millis(1000));
               println!("thread 2");
            } 
        });
    
        t1.await.unwrap();
        t2.await.unwrap();
    }
    

    这里我们用tokio::spawn函数生成了两个线程,它们的功能很简单,就是每隔1s打印一个字符串。
    其中tokio::spawn中的async前缀是不可以省略的,如果我们省略的话,就会有如下报错:


    报错
    只有加上异步标记async,报错才会消失。而且在这里进行的let t1 = xxx和let t2 = xxx的操作,其中spawn内部的代码不会被执行,只有在下面 t1.await.unwrap()、t2.await.unwrap()运行后,才会被真正执行。执行结果如下: 交错输出

    可以看到这两个线程t1和t2,确实是在并发执行。

    相关文章

      网友评论

          本文标题:rust中的异步编程

          本文链接:https://www.haomeiwen.com/subject/jwoialtx.html