かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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