かずきのBlog@hatena

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

Reactive ExtensionsのLINQの中でTaskを返すメソッドを使う

2015/06/26
SelectManyでよかった件を追記

そういうケースありますよね? たとえば

var source = ...何かIO<T>...;
source
  .Select(async x => await HogeAsync(x))
  ...省略...

みたいになったとき後続にはTask<T>が流れていきます。俺が欲しいのはTask<T>じゃなくてTの値なんだ!というときにはSelectManyメソッドを使うといい感じにTask<T>からTに変換してくれます。Switchメソッドを呼ぶといい感じにTask<T>からTに変換してくれます。

つまりこんな感じ。

var source = ...何かIO<T>...;
source
  .SelectMany(x => HogeAsync(x))
  .Subscribe(x => 
  {
    // xはHogeAsyncの戻り値のTask<T>のTの値
  });

メモメモ。