かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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