我正在尝试在不同线程中使用tcp流的读取和写入。这是我目前拥有的:
use tokio::prelude::*;
use tokio::net::TcpStream;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut stream = TcpStream::connect("localhost:8080").await?;
let (mut read, mut write) = stream.split();
tokio::spawn(async move {
loop {
let mut buf = [0u8; 32];
read.read(&mut buf).await.unwrap();
println!("{}", std::str::from_utf8(&buf));
}
});
Ok(())
}
我将使用另一个线程进行写入。我的问题是我得到了一个错误,即“流”在仍然借用时被丢弃了。
这是由于Tokio::split
的方法签名所致,正如您所看到的,它需要Tokio::split
,因此由于&mut self
的限制,它的一部分不能在tokio::spawn
将来的参数中使用。因此,这正是错误所言。
您正在搜索的是'static
。 tokio::io::split
Playground