加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 学习资料

rust 实现协程池

时间:2023-02-13 00:35:56  来源:原创  作者:站长
jUt华陈数据科技
use crossbeam_channel::{Receiver, bounded};jUt华陈数据科技
use tokio::time::{Duration, delay_for};jUt华陈数据科技
 jUt华陈数据科技
#[tokio::main]jUt华陈数据科技
async fn main() {jUt华陈数据科技
    let (s, r) = bounded(10);jUt华陈数据科技
 jUt华陈数据科技
    for i in 0..100 {jUt华陈数据科技
        s.send(i).unwrap();jUt华陈数据科技
        let rx = r.clone();jUt华陈数据科技
        tokio::task::spawn(async move {jUt华陈数据科技
            handle(i, rx).await;jUt华陈数据科技
        });jUt华陈数据科技
    }jUt华陈数据科技
 jUt华陈数据科技
    delay_for(Duration::from_secs(10)).await;jUt华陈数据科技
}jUt华陈数据科技
 jUt华陈数据科技
async fn handle(i: i32, rx: Receiver<i32>) {jUt华陈数据科技
    let _d = defer::defer(|| {jUt华陈数据科技
        println!("{} been defer", i);jUt华陈数据科技
        if let Err(err) = rx.recv() {jUt华陈数据科技
            println!("err : {:?}", err);jUt华陈数据科技
        }jUt华陈数据科技
    });jUt华陈数据科技
 jUt华陈数据科技
    delay_for(Duration::from_secs(1)).await;jUt华陈数据科技
    println!("{} been excute", i);jUt华陈数据科技
}
jUt华陈数据科技
使用 channel 做数量控制, defer 来保证 所有 消息被释放jUt华陈数据科技
jUt华陈数据科技
 
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
实现php间隔一段时间执行一次某段代码
实现php间隔一段时间
相关文章
    无相关信息
栏目更新
栏目热门