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

运行Axum官方示例代码时编译报错:默认运行时为`multi_thread`但`rt-multi-thread`功能未启用

运行Axum官方示例代码时编译报错:默认运行时为multi_thread但rt-multi-thread功能未启用

我之前试Axum官方示例的时候也踩过这个坑,这个错误本质是Tokio的运行时配置不匹配导致的:

#[tokio::main]这个宏默认会启用多线程运行时(multi_thread),但咱们在Cargo.toml里只加了基础的Tokio依赖,没有开启对应的rt-multi-thread功能,所以编译器就报错了。

解决方案一:修改Cargo.toml添加必要的Tokio特性(推荐)

最稳妥的方式是给Tokio依赖添加需要的特性,既支持多线程运行时,又能正常使用#[tokio::main]宏。修改后的Cargo.toml如下:

[package]
name = "axum-play"
version = "0.1.0"
edition = "2021"

[dependencies]
axum = "0.8.4"
serde = { version = "1.0.219", features = ["derive"] }
# 添加上rt-multi-thread(多线程运行时)和macros(支持tokio::main宏)特性
tokio = { version = "1.44.2", features = ["rt-multi-thread", "macros"] }
# 或者用"full"特性一次性开启所有常用功能(适合快速测试)
# tokio = { version = "1.44.2", features = ["full"] }
tracing = "0.1.41"
tracing-subscriber = "0.3.19"

解决方案二:改用单线程运行时(适合简单场景)

如果你的服务不需要多线程,也可以修改#[tokio::main]的参数,指定使用单线程运行时,这样不用改Cargo.toml:

// 把原来的#[tokio::main]改成下面这样
#[tokio::main(flavor = "current_thread")]
async fn main() {
    // 原有的代码逻辑不变...
    tracing_subscriber::fmt::init();
    let app = Router::new()
        .route("/", get(root))
        .route("/users", post(create_user));
    let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
}

验证修正效果

改完之后,重新执行cargo run,应该就能正常编译并启动Axum服务了:

  • 访问http://localhost:3000会返回Hello, World!
  • 给http://localhost:3000/users发POST请求(带JSON body {"username": "test"}),会返回状态码201和对应的用户JSON。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:45:31