首页 > 解决方案 > 如何在 rust 中的异步函数之后执行代码?

问题描述

我可能缺少一些我知道的基本防锈概念,但我不知道从哪里开始。

所以我有这个在 ws.rs 文件中工作的 websocket 模块

在我的 main.rs 文件中,我这样做:

mod ws;

fn main(){
    ws::create();
    eprintln!("Some other code here...");
}

问题:ws::create() 之后的代码没有执行

那么创建函数中有什么:

// rest of the ws code module here

#[tokio::main]
pub async fn create() -> Result<(), IoError> {
    let addr ="0.0.0.0:8080".to_string();

    let state = PeerMap::new(Mutex::new(HashMap::new()));

    // Create the event loop and TCP listener we'll accept connections on.
    let try_socket = TcpListener::bind(&addr).await;
    let listener = try_socket.expect("Failed to bind");
    println!("Listening on: {}", addr);

    // Let's spawn the handling of each connection in a separate task.
    while let Ok((stream, addr)) = listener.accept().await {
        tokio::spawn(handle_connection(state.clone(), stream, addr));
    }

    Ok(())
}

所以我知道我缺少一些关于异步或这种函数(异步/同时)的基本知识;;如果有人知道如何处理这种基本情况,我将不胜感激:) 谢谢!

编辑:

更清楚我想做什么;在创建我的 websocket 之后,我实例化了一些获取数据流的东西(这也是异步无限的),我想将此流传递给我的 websocket

mod ws;

fn main(){
    ws::create();
    // Here I receive a stream of data 
    // and I want to do something like ws::send(streamPayload)
}

标签: rustrust-tokio

解决方案


好的,我的问题可能不清楚,或者答案太明显我不知道,但我唯一需要的就是以这种方式放置另一个线程:

fn main(){

    let wsThread = thread::spawn(|| {
        ws::create(tx);
    });

    println!("some other code");
    wsThread.join().unwrap();
}

推荐阅读