Tokio 1.11.0版本使用旧API出现未解析导入等编译错误如何解决
问题根源
你复制的是Tokio 0.1.x版本的示例代码,而Cargo.toml中引入的是1.11.0版本的Tokio,两个版本属于跨大版本迭代,API完全不兼容,因此出现编译错误。
修复方案
不需要修改Cargo.toml配置,直接替换src/main.rs的内容为1.x版本适配的代码即可:
use tokio::net::TcpStream; #[tokio::main] async fn main() { let addr = "93.184.216.34:9243".parse().unwrap(); match TcpStream::connect(&addr).await { Ok(_socket) => println!("successfully connected"), Err(e) => println!("failed to connect; err={:?}", e), } }
报错原因说明
- 找不到
tokio::prelude:该模块是Tokio 0.x版本的专属模块,1.x版本已经正式移除,无需再导入 - 找不到
tokio::run:这是0.x版本启动事件循环的方法,1.x版本统一使用#[tokio::main]宏标记异步入口函数,或者手动构建Runtime实例调用block_on方法运行Future - 找不到
and_then方法:0.x版本的Future使用自定义的组合子API,1.x版本匹配Rust标准库的std::future::Future实现,统一使用await语法处理异步结果,不再需要旧的组合子写法。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

