如何仅生成一次线程,并能够更新 Rust 中的某些值

0 我有一个带有Axum 的网络服务器,当我接到一个呼叫时,比如说我的端点start,我想启动一个可以通过调用第二个端点来停止的进程stop

如果我第二次调用端点start,我希望能够不启动线程,因为它已经启动了(也许,但现在还不行,我想更新其中一个值,但我们假设我不做任何事情,因为这个过程已经启动了)。

我的主要功能如下:

css 复制代码
#[tokio::main]
async fn main() {
    tracing_subscriber::fmt().with_writer(io::stderr).init();

    let process_starter = Arc::new(ProcessStarter::new());

    let app_state = AppState {
        process_starter,
    };

    let app = Router::new()
        .route("/start", post(start))
        .route("/stop", post(stop))
        .with_state(app_state.clone());

    info!("Starting web server");
    let listener = tokio::net::TcpListener::bind("0.0.0.0:3000")
        .await
        .unwrap();
    axum::serve(listener, app).await.unwrap();
}

但我不知道如何实现ProcessStarter,因为我尝试过的一些事情,比如产生新线程和保持它的状态不起作用。

相关推荐
子玖4 小时前
微信扫码注册登录-基于网站应用
后端·微信·go
Assby4 小时前
Java速通Go基础内容
后端
心在飞扬4 小时前
LangGraph 基础知识
前端·后端
Java编程爱好者4 小时前
MyBatis-mybatis入门与增删改查
后端
神奇小汤圆5 小时前
并发编程进阶:volatile、内存屏障与 CPU 缓存机制详解
后端
神奇小汤圆5 小时前
Redis实现 IP 维度滑动窗口限流实践
后端
程序员清风5 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
树獭叔叔5 小时前
19-为什么AI工程这么喜欢"创造名词":从Prompt到Skill的造词运动
后端·aigc·openai
天朝八阿哥5 小时前
使用Docker+vscode搭建离线的go开发调试环境
后端·docker·visual studio code
心在飞扬5 小时前
工具调用出错捕获提升程序健壮性
前端·后端