Объединение двух наблюдаемых с действием между ними - PullRequest
3 голосов
/ 23 ноября 2011

Я довольно новичок в rx, поэтому вопросы продолжают появляться :)

У меня есть две наблюдаемые последовательности: сначала я хочу выполнить одну до конца, а затем начать подписку на другую (они обе холодные). Я верю, что Concat () сделает это (пожалуйста, поправьте меня, если я ошибаюсь).

Но что, если я захочу сделать "что-то" после того, как первый завершен, до того, как другой запустится - скажем, например, записать что-то на консоль?

Очень простой код, который я имею, выглядит следующим образом:

var subject = new ReplaySubject<IResponse>();
observable1
    .Concat(observable2)
    .Subscribe(
        subject.OnNext,
        () =>
        {
            subject.OnCompleted();
        });

Могу ли я это сделать?

1 Ответ

4 голосов
/ 23 ноября 2011

Оператор Do идеально подходит для ведения журнала и имеет те же сигнатуры методов, что и оператор Subscribe, поэтому вы можете выполнять действия OnNext, OnError и OnComplete.

  var observable1 = Observable.Range(0,10);
  var observable2 = Observable.Range(10, 10);

  observable1.Do(_ => { }, 
         () => Console.WriteLine("Log First Sequence Complete"))
     .Concat(observable2)
     .Subscribe(i => Console.WriteLine("On Next Value {0}", i),
         () => Console.WriteLine("Log Both Sequences Complete"));
...