0

所以我在 Rust 中有一个多线程程序,它将获取请求发送到我的网站,我想知道如何检测 ConnectionReset。我要做的是,在请求之后,检查是否有 ConnectionReset,如果有,请等待一分钟,这样线程就不会恐慌

我现在使用的代码

let mut req = reqwest::get(&url).unwrap();

执行完之后,我想检查是否有 ConnectionReset,然后 println(“连接错误”),而不是让线程恐慌。

我想检测的错误

thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: 
Error { kind: Io(Custom { kind: Other, error: Os { code: 10054, kind: ConnectionReset, 
message: "An existing connection was forcibly closed by the remote host." } }), 
url: Some("https://tayhay.vip") }', src\main.rs:22:43

我还阅读了一些关于 std::panic::catch_unwind 的内容,但我不确定这是否是正确的方法。

4

1 回答 1

1

.unwrap字面意思是:“发生错误时的恐慌”。如果您不想惊慌,则必须自己处理错误。根据您未向我们展示的代码,您在这里有三种解决方案:

  1. ?使用运算符向上传播错误并让调用函数处理它。
  2. 准备好一些默认值以备出现错误时使用(或即时创建):
let mut req = reqwest::get (&url).unwrap_or (default);

或者

let mut req = reqwest::get (&url).unwrap_or_else (|_| { default });

(这可能不适用于这种特定情况,因为我不知道在这里什么会成为合理的默认值,但它适用于其他错误处理情况)。

  1. 有一些特定的错误处理代码:
match reqwest::get (&url) {
   Ok (mut req) => { /* Process the request */ },
   Err (e) => { /* Handle the error */ },
}

有关更多详细信息,Rust 书中有一整章是关于错误处理的。

于 2021-02-12T08:29:55.773 回答