かずきのBlog@hatena

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

非同期処理を行うメソッドの戻り値は全てIObservableにしてしまえばいいんじゃないんだろうか

最近、タイトルの通りのことを思っています。
今の非同期処理のAPIは下のようなコールバックを渡す形や、完了イベントを処理する形が一般的だと思います。(あとはBegin〜とEnd〜のメソッドのペアとか)

public void Hoge(int param, Action<int> callback)
{
  // 非同期の処理がいろいろ
}

この書き方は煩雑なことこの上ないです。でも、Reactive Extensionsを前提にするなら、IObservableを戻り値とすることで、すごくすっきり書けそうな気がします。

public IObservable<int> Hoge(int param)
{
  // 非同期の処理がいろいろ
}

こんな風になってると

var client = new Foo();
client.Hoge(10).Subscribe(i => Console.WriteLine(i));

のようにすっきり処理が書けます。
テスト用のモックを作るときも

public IObservable<int> Hoge(int param)
{
  return Observable.Return(100);
}

のように簡単に作ることも出来ます。


早くReactive Extensionsが一般的なものにならないかなぁと思う今日この頃でした。