• rust async


    use futures::{ self, executor};
    use std::thread;
    use std::time;
    async fn song() {
                    loop {
    
        println!("song!");
            thread::sleep(time::Duration::from_secs(5));
                    }
    }
    
    
    async fn dance() {
                    loop {
            thread::sleep(time::Duration::from_secs(5));
        println!("Dance!");
                    }
    }
    
    
    async fn async_main() {
        let f1 = song();
        let f2 = dance();
        futures::join!(f1, f2);
    }
    fn main() {
        executor::block_on(async_main());
        println!("Hello, world!");
    }

    没有dance

    [root@bogon async4]# cargo build
       Compiling own v0.1.0 (/data2/rust/async4)
        Finished dev [unoptimized + debuginfo] target(s) in 0.58s
    [root@bogon async4]# cargo run
        Finished dev [unoptimized + debuginfo] target(s) in 0.03s
         Running `target/debug/own`
    song!
    song!
    song!
    song!
    song!
    song!
    song!
    song!
    song!
    ^C
    thread::sleep改成 
       sleep(time::Duration::from_secs(5)).await;
    //例子二
    use futures::{ self, executor};
    use std::thread;
    use std::time;
    use async_std::task::{sleep, spawn};
    async fn song() {
                    loop {
    
        println!("song!");
            sleep(time::Duration::from_secs(5)).await;
                    }
    }
    
    
    async fn dance() {
                    loop {
            sleep(time::Duration::from_secs(5)).await;
        println!("Dance!");
                    }
    }
    
    
    async fn async_main() {
        let f1 = song();
        let f2 = dance();
        futures::join!(f1, f2);
    }
    fn main() {
        executor::block_on(async_main());
        println!("Hello, world!");
    }
    use futures::{ self, executor};
    use std::thread;
    use std::time;
    use async_std::task::{sleep, spawn};
    
    async fn async_main() {
                    loop {
            sleep(time::Duration::from_secs(5)).await;
        println!("Dance!");
                    }
    }
    fn main() {
        executor::block_on(async_main());
        println!("Hello, world!");
    }
    
     
    warning: 2 warnings emitted
    
        Finished dev [unoptimized + debuginfo] target(s) in 0.06s
         Running `target/debug/own`
    Dance!
    Dance!
    ^C
    use futures::{ self, executor};
    use std::thread;
    use std::time;
    use async_std::task::{sleep, spawn};
    
    async fn async_main() {
                    loop {
            //sleep(time::Duration::from_secs(5)).await;  
            sleep(time::Duration::from_secs(5));  //sleep不会执行
        println!("Dance!");
                    }
    }
    fn main() {
        executor::block_on(async_main());
        println!("Hello, world!");
    }
    use futures::{ self, executor,join};
    use std::thread;
    use std::time;
    use async_std::task::{sleep};
    
    async fn async_main() {
                    loop {
            //sleep(time::Duration::from_secs(5)).await;
            let f1 = sleep(time::Duration::from_secs(5));
            join!(f1);
        println!("Dance!");
                    }
    }
    fn main() {
        executor::block_on(async_main());
        println!("Hello, world!");
    }

    顺序执行 --串联

    use futures::{ self, executor,join};
    use std::thread;
    use std::time;
    use async_std::task::{sleep};
    async fn worker1(){
        println!("start worker1!");
            sleep(time::Duration::from_secs(5)).await;
        println!("stop worker1!");
    }
    async fn worker2(){
        println!("start worker2!");
            sleep(time::Duration::from_secs(5)).await;
        println!("stop worker2!");
    }
    async fn worker3(){
        println!("start worker3!");
            sleep(time::Duration::from_secs(5)).await;
        println!("stop worker3!");
    }
    async fn async_main() {
        worker1().await;
        worker2().await;
        worker3().await;
    }
    fn main() {
        executor::block_on(async_main());
        println!("Hello, world!");
    }
        Finished dev [unoptimized + debuginfo] target(s) in 0.06s
         Running `target/debug/own`
    start worker1!
    stop worker1!
    start worker2!
    stop worker2!
    start worker3!
    stop worker3!
    Hello, world!

    并联

    //例子二
    use futures::{ self, executor,join};
    use std::thread;
    use std::time;
    use async_std::task::{sleep};
    async fn worker1(){
        println!("start worker1!");
            sleep(time::Duration::from_secs(5)).await;
        println!("stop worker1!");
    }
    async fn worker2(){
        println!("start worker2!");
            sleep(time::Duration::from_secs(5)).await;
        println!("stop worker2!");
    }
    async fn worker3(){
        println!("start worker3!");
            sleep(time::Duration::from_secs(5)).await;
        println!("stop worker3!");
    }
    async fn async_main() {
            // sequence
        //worker1().await;
        //worker2().await;
        //worker3().await;
            //concurrence
            join!( worker1(), worker2(), worker3());
    }
    fn main() {
        executor::block_on(async_main());
        println!("Hello, world!");
    }
        Finished dev [unoptimized + debuginfo] target(s) in 0.06s
         Running `target/debug/own`
    start worker1!
    start worker2!
    start worker3!
    stop worker1!
    stop worker2!
    stop worker3!
    Hello, world!

    串联 + 并联

    use futures::{ self, executor,join};
    use std::thread;
    use std::time;
    use async_std::task::{sleep};
    async fn worker1(){
        println!("start worker1!");
            sleep(time::Duration::from_secs(5)).await;
        println!("stop worker1!");
    }
    async fn worker2(){
        println!("start worker2!");
            sleep(time::Duration::from_secs(5)).await;
        println!("stop worker2!");
    }
    async fn worker3(){
        println!("start worker3!");
            sleep(time::Duration::from_secs(5)).await;
        println!("stop worker3!");
    }
    async fn async_main() {
            // sequence
        //worker1().await;
        //worker2().await;
        //worker3().await;
            //concurrence
            //join!( worker1(), worker2(), worker3());
            let f1 = async {
        worker1().await;
        worker2().await;
            };
            join!( f1, worker3());
    
    }
    fn main() {
        executor::block_on(async_main());
        println!("Hello, world!");
    }
        Finished dev [unoptimized + debuginfo] target(s) in 0.06s
         Running `target/debug/own`
    start worker1!
    start worker3!
    stop worker1!
    start worker2!
    stop worker3!
    stop worker2!
    Hello, world!
  • 相关阅读:
    第三方登录(QQ登录)开发流程详解
    编译PHP并与Ngnix整合
    Ngnix的日志管理和用定时任务完成日志切割
    Ngnix 安装、信号量、虚拟主机配置
    Redis命令操作详解
    Redis的安装和部署
    消息队列
    Ubuntu中Google Chrome安装
    关于双系统下Ubuntu不能访问Windows中某个盘的问题
    numpy.random.shuffle()与numpy.random.permutation()的区别
  • 原文地址:https://www.cnblogs.com/dream397/p/14201957.html
Copyright © 2020-2023  润新知