rust中的异步编程

2021-11-01  本文已影响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,确实是在并发执行。

上一篇 下一篇

猜你喜欢

热点阅读