かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

F#でTask<T>を待つ

非同期ワークフローの中でTaskってどうやって使うんだろう?と思ってたらAsyncクラスにAwaitaTaskっていうずばりっぽいメソッドがありました。こいつを使えば非同期ワークフローの中でlet!で結果を受け取ることができる。HttpClientを使ってGoogleトップページの情報をとってくるコードはこんな感じになりました。

割といい感じかも。

open System.Net.Http

async {
    use c = new HttpClient()
    let! r = c.GetAsync("http://www.google.co.jp") |> Async.AwaitTask
    r.EnsureSuccessStatusCode() |> ignore
    let! body = r.Content.ReadAsStringAsync() |> Async.AwaitTask

    printfn "%A" body
} |> Async.RunSynchronously