かずきのBlog@hatena

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

非同期処理を行うメソッドの戻り値は全て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が一般的なものにならないかなぁと思う今日この頃でした。