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());
}

或在playground

大师可以教我如何捕捉这些错误吗

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 是游乐场。