0

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

或在操场上

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

线程'main'在'调用Result::unwrap()一个Err 值时惊慌失措:Os {代码:101,种类:NetworkUnreachable,消息:“网络无法访问”}',src/main.rs:6:67

4

1 回答 1

1

您需要更改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用于您可能希望从中传播错误的其他函数。这里是游乐场。

于 2022-02-07T21:27:06.443 回答