下のように書くと、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 に問題があるかと思ったけど、全然違った…