下のように書くと、DNSエラーとなる。
#[tokio::main] async fn main() { let res = tokio::spawn(async move { let v = get_myip().await.unwrap(); println!("{}", v); }); } pub async fn get_myip() -> Result<String, Box<dyn std::error::Error>> { let ip: Ip = serde_json::from_str(&reqwest::get("https://httpbin.org/ip") .await? .text() .await?)?; Ok(ip.origin) }
しかし、実行されるまで待って、res.await.unwrap();とすれば、エラーは解消される。
let res = tokio::spawn(async move { let v = get_myip().await.unwrap(); println!("{}", v); }); res.await.unwrap();
レスポンスがないままtokio::spawnが終了してしまうからっぽい。
うーん、奥が深い… httpbin.org に問題があるかと思ったけど、全然違った…