You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust线程启动时如何调用两个函数?当前仅第一个函数执行

问题分析与解决

你的代码逻辑上本应顺序执行libReceiveOrder()和libReceiveBooks(),只执行第一个的情况通常源于两个原因,对应解决方法如下:

原因1:libReceiveOrder()无限阻塞

如果这个函数是长期运行的任务(比如持续监听订单的循环逻辑),会直接卡住线程,导致后续代码无法执行。解决方式是给它单独分配子线程,让两个任务并行运行:

let librarian = thread::spawn(move || {
    // 为订单处理任务单独开线程,避免阻塞主线程逻辑
    let order_thread = thread::spawn(|| libReceiveOrder());
    // 同时执行书籍接收逻辑
    libReceiveBooks();
    // 若需要等待订单线程结束,可调用join
    order_thread.join().unwrap();
});

原因2:libReceiveOrder()执行时panic

如果函数内部触发panic且未被捕获,会直接终止整个线程,后续代码自然无法运行。可以用catch_unwind捕获panic,保证线程继续执行:

use std::panic;

let librarian = thread::spawn(move || {
    // 捕获panic,避免线程直接终止
    let _ = panic::catch_unwind(|| libReceiveOrder());
    // 无论前序是否panic,都会执行此函数
    libReceiveBooks();
});

另外也可以单独测试libReceiveOrder(),确认它能正常退出,或是检查函数内部是否有未处理的错误导致提前终止。

内容的提问来源于stack exchange,提问作者cloud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:12:31