最近、タイトルの通りのことを思っています。
今の非同期処理の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が一般的なものにならないかなぁと思う今日この頃でした。