tokio::net::TcpStream 如何处理任何类型的错误?
tokio::net::TcpStream how to handle any kind of errors?
在 tokio::net::TcpStream
的情况下,我坚持正确处理恐慌
use tokio::*;
use tokio::{net::{ TcpStream }, io::AsyncWriteExt};
#[tokio::main]
async fn main() {
let mut stream = TcpStream::connect("10.20.30.40:6142").await.unwrap();
println!("created stream");
let result = stream.write(b"hello world\n").await;
println!("wrote to stream; success={:?}", result.is_ok());
}
大师可以教我如何捕捉这些错误吗
thread 'main' panicked at 'called Result::unwrap()
on an Err
value: Os { code: 101, kind: NetworkUnreachable, message: "Network is
unreachable" }', src/main.rs:6:67
您需要更改 main()
来处理错误,并使用 ?
运算符而不是 unwrap()
来传播它们。
type SomeResult<T> = Result<T, Box<dyn std::error::Error>>;
#[tokio::main]
async fn main() -> SomeResult<()> {
let mut stream = TcpStream::connect("10.20.30.40:6142").await?;
println!("created stream");
let result = stream.write(b"hello world\n").await;
println!("wrote to stream; success={:?}", result.is_ok());
Ok(())
}
最后一行 (Ok(())
) 是因为 main()
现在需要返回结果。我还添加了一个别名,这样您就可以将 SomeResult
重新用于您可能希望从中传播错误的其他函数。 Here 是游乐场。
在 tokio::net::TcpStream
的情况下,我坚持正确处理恐慌use tokio::*;
use tokio::{net::{ TcpStream }, io::AsyncWriteExt};
#[tokio::main]
async fn main() {
let mut stream = TcpStream::connect("10.20.30.40:6142").await.unwrap();
println!("created stream");
let result = stream.write(b"hello world\n").await;
println!("wrote to stream; success={:?}", result.is_ok());
}
大师可以教我如何捕捉这些错误吗
thread 'main' panicked at 'called
Result::unwrap()
on anErr
value: Os { code: 101, kind: NetworkUnreachable, message: "Network is unreachable" }', src/main.rs:6:67
您需要更改 main()
来处理错误,并使用 ?
运算符而不是 unwrap()
来传播它们。
type SomeResult<T> = Result<T, Box<dyn std::error::Error>>;
#[tokio::main]
async fn main() -> SomeResult<()> {
let mut stream = TcpStream::connect("10.20.30.40:6142").await?;
println!("created stream");
let result = stream.write(b"hello world\n").await;
println!("wrote to stream; success={:?}", result.is_ok());
Ok(())
}
最后一行 (Ok(())
) 是因为 main()
现在需要返回结果。我还添加了一个别名,这样您就可以将 SomeResult
重新用于您可能希望从中传播错误的其他函数。 Here 是游乐场。