rust - 如何在 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)
}
解决方案
好的,我的问题可能不清楚,或者答案太明显我不知道,但我唯一需要的就是以这种方式放置另一个线程:
fn main(){
let wsThread = thread::spawn(|| {
ws::create(tx);
});
println!("some other code");
wsThread.join().unwrap();
}
推荐阅读
- laravel-livewire - 如何从 Bootstrap 5 下拉列表中更新 livewire $variable?(不选择输入)
- kubernetes - kubernetes PersistentVolumeClaim 状态待定
- php - 有什么好主意吗?Codeigniter 4,如何制作:View上没有请求,只有Controller上?
- sql - 当 MRR 等于 0 时为 MRR 表添加额外的列
- github - 如何处理sudoers无需密码自动重启nginx?
- arrays - Bigquery:是否有一种 json 路径方法可以仅从具有动态键的 json 数组中提取值?
- gpu - 在 Jetson NX 上导入 dlib 得到未定义的符号:png_riffle_palette_neon
- excel - 如何从参考单元格中获取 msgbox 文本,其中包括换行符
- python - 如何将具有 mp3 文件的项目发布到 pypi?
- typescript - IntersectionObserver 在元素进入视图之前触发