Есть ли эквивалент оператора Task.ContinueWith в Rx? - PullRequest
4 голосов
/ 20 июля 2011

Есть ли эквивалент оператора Task.ContinueWith в Rx?

Я использую Rx с Silverlight, я делаю два вызова веб-сервиса с методом FromAsyncPattern, и я хотел бы сделать их синхронно .

        var o1 = Observable.FromAsyncPattern<int, string>(client.BeginGetData, client.EndGetData);
        var o2 = Observable.FromAsyncPattern<int, string>(client.BeginGetData, client.EndGetData);

Есть ли оператор (например, Zip), который будет запускать / подписываться только на o2 только после того, как o1 вернет Completed?
Я обрабатываю сбой вызова любого веб-сервиса одинаково.

Ответы [ 2 ]

7 голосов
/ 20 июля 2011

Да, это называется проекция:

o1().SelectMany(_ => o2()).Subscribe();
6 голосов
/ 20 июля 2011

Пока Алекс прав, другой способ сделать это:

Observable.Concat(
    o1(4),
    o2(6))
  .Subscribe(x => /* Always one, then two */);

Что гарантирует, что o2 запускается только после o1, а не Merge, который запускает их одновременно:

Observable.Merge(
    o1(4),
    o2(6))
  .Subscribe(x => /* Either one or two */);
...