相关疑难解决方法(0)

在闭包之间共享弧

我正在尝试编写一个简单的 TCP 服务器来读取和广播消息。
我正在使用 Tokio,但我认为这更像是一个普遍的 Rust 问题。

我有一个具有共享状态的弧:
let state = Arc::new(Mutex::new(Shared::new(server_tx)));

后来我想生成 2 个线程,它们将使用对该状态的引用:

let server = listener.incoming().for_each(move |socket| {
    // error[E0382]: capture of moved value: `state`
    process(socket, state.clone());
    Ok(())
}).map_err(|err| {
    println!("accept error = {:?}", err);
});

let receive_sensor_messages = sensors_rx.for_each(move |line| {
    println!("Received sensor message, broadcasting: {:?}", line);

    // error[E0597]: borrowed value does not live long enough
    // error[E0507]: cannot move out of borrowed content 
    for (_, tx) in state.clone().lock().unwrap().clients {
        tx.unbounded_send(line.clone()).unwrap();
    }
    Ok(())
}).map_err(|err| {
    println!("line …
Run Code Online (Sandbox Code Playgroud)

rust

8
推荐指数
1
解决办法
4000
查看次数

标签 统计

rust ×1