【Rust】reqwest::Client::new() をforループで実行できるのか?

tokio::spawnのthreadで、reqwest::Clientをループで回す。結論から言うとできる。

//
    let handle = tokio::spawn(async move {
        let _ = post_test().await;
    });
//

async fn post_test() {
    for i in 0..3 {
        let n = Name { family: "tanaka".to_string(), first:"taro".to_string(), age: i as i32};
        let json = json!(n);
        let client = reqwest::Client::new();
        let resp = client.post("http://httpbin.org/post")
            .json(&json)
            .send()
            .await;
        let body = resp.expect("REASON").text().await.unwrap();   
        println!("{}", body);
    }
}

//
“json”: {
“age”: 2,
“family”: “tanaka”,
“first”: “taro”
},
//

存在しないipなど、異常系の場合は、reqwest::getでErrで返ってくるので、成功した時だけ送信する。

async fn post_test() -> Result<(), Box<dyn std::error::Error>> {

    let url = ["https://hogehogehogehogehoge.org/".to_string(), "http://httpbin.org/post".to_string()];
    for i in 0..url.len() {
        let result = reqwest::get(url[i].clone()).await;
        match result {
            Err(error) => {
                println!("error, {}", url[i].clone());
            }
            Ok(_) => {
                let n = Name { family: "tanaka".to_string(), first:"taro".to_string(), age: i as i32};
                let json = json!(n);
                let client = reqwest::Client::new();
                let resp = client.post(url[i].clone())
                    .json(&json)
                    .send()
                    .await?;
                let body = resp.text().await.unwrap();   
                println!("{}", body);
            }
        }
    }
    Ok(())
}

一番しっくりするが、なんかベストプラクティスではなさそうな感じがする…