使用线程和通道的 Rust 代码恐慌

丹尼伯奇

我正在编写我的第一个 Rust 程序,但遇到了恐慌。代码一直运行到恐慌评论,我在这里错过了什么明显的东西吗?

fn print_num(n:i32)
{
    println!("Hi! {}", n);
}

fn main() 
{
    let (s, r) = std::sync::mpsc::channel();
    let (s1, r1) = std::sync::mpsc::channel();
    std::thread::spawn(move || {
        let i  = r.recv().unwrap();
        print_num(i);
        s1.send(i+1).unwrap();
    });
    s.send(0).unwrap();
    println!("Got back {}", r1.recv().unwrap());
    // Panic code below
    s.send(1).unwrap();
    println!("Got back {}", r1.recv().unwrap());

    println!("Hello, world!");
}
kmdreko

第二次调用s.send()返回一个SendError. 文档中写道:

只有当通道的接收端断开连接时,发送操作才会失败,这意味着永远无法接收到数据。

你的接收者r被移动到线程中,读取一条消息,然后被销毁。下一个呼叫没有人接收消息1也许您希望您的线程在某种循环中重复处理消息?

相关:接收器在尝试通过通道发送时关闭并返回 SendError

1. 这可能并不总是恐慌,因为它依赖于线程执行顺序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Rust 为调试和发布模式设置不同的恐慌输出

如何使用Rust中的通道来菊花链线程?

使用 lldb 和 cppvsdbg 在“NotFound”消息中出现恐慌的 VSCode Rust 调试

如何使用线程在 Rust 中同时运行此代码?

使用rust-cpython从Rust并行运行Python代码

将C ++与Rust接口-返回CString恐慌

使用mpsc :: Sender <T <'a >>和线程的Rust生存期

多线程性能(使用Rust)

如何实现 Rust 的通道?

Rust:在 iframe 中运行但不在常规浏览器选项卡中运行时线程发生恐慌

Rust`std :: time :: Instant`“对'提供的瞬间感到恐慌比自己晚”

C代码的Rust版本

Rust构建器模式是否必须使用冗余结构代码?

如何使用C ++ / Qt / CMake项目构建Rust代码?

如何在Rust中禁用未使用的代码警告?

从文件加载配置,并在各处使用rust代码

使用GitHub操作的Rust过程失败,退出代码101

Rust中的后台工作线程和同步

为什么这个等待线程完成的Rust代码无法正常工作?

异步 Rust 中的多线程 - 为什么我的代码无法并行化?

Golang http:恐慌服务:关闭通道

缓冲通道工作人员恐慌

如何使以下Rust代码编译?

使用 rustc 编译代码时如何在库目录之外调用 Rust 代码?

困惑为什么这个CGO代码恐慌

如何使用VSCode和LLDB检查局部变量或使用带有Rust代码的监视窗口?

处理恐慌和延误的职能

Send和'rust on rust in rust有什么区别?

rust - 将数据从函数参数(从线程)发送到 mpsc 通道