あなたはワンライナーとしてそれを行うことができないという事実が私を悩ますが、これは、動作します:
ここ
var updatesReplayed = updates.Replay();
updatesReplayed.Connect();
var results = response.Concat(updatesReplayed);
の機能実証実験:質問の図から
// time | 1 2 3 4 5 6 7 8 9
// Response(cold) | x y z |
// Updates(hot) | 1 2 3 4 |
// Result | x y z 123 4 |
var scheduler = new TestScheduler();
var updates = scheduler.CreateHotObservable(
ReactiveTest.OnNext(100.ToMsTicks(), "1"),
ReactiveTest.OnNext(200.ToMsTicks(), "2"),
ReactiveTest.OnNext(400.ToMsTicks(), "3"),
ReactiveTest.OnNext(800.ToMsTicks(), "4"),
ReactiveTest.OnCompleted<string>(900.ToMsTicks())
);
var response = scheduler.CreateColdObservable(
ReactiveTest.OnNext(300.ToMsTicks(), "x"),
ReactiveTest.OnNext(400.ToMsTicks(), "y"),
ReactiveTest.OnNext(500.ToMsTicks(), "z"),
ReactiveTest.OnCompleted<string>(600.ToMsTicks())
);
var expectedResults = scheduler.CreateHotObservable(
ReactiveTest.OnNext(300.ToMsTicks(), "x"),
ReactiveTest.OnNext(400.ToMsTicks(), "y"),
ReactiveTest.OnNext(500.ToMsTicks(), "z"),
ReactiveTest.OnNext(600.ToMsTicks(), "1"),
ReactiveTest.OnNext(600.ToMsTicks(), "2"),
ReactiveTest.OnNext(600.ToMsTicks(), "3"),
ReactiveTest.OnNext(800.ToMsTicks(), "4"),
ReactiveTest.OnCompleted<string>(900.ToMsTicks())
);
var replayed = updates.Replay();
replayed.Connect();
var results = response.Concat(replayed);
var observer = scheduler.CreateObserver<string>();
results.Subscribe(observer);
scheduler.Start();
ReactiveAssert.AreElementsEqual(expectedResults.Messages, observer.Messages);
大声で考えてみましょう。実際にはこのように少し見えます:http://stackoverflow.com/questions/31362031/with-reactive-extensions-rx-is-it-possible-to-add-a-pause-commandブール値ではなくストリームの完全な値。また、一時停止していないと再び一時停止することはできません。 hot.StartWithAndBufferUntilComplete(cold)のようなものです。 – asgerhallas
複数の「応答」が存在しますか? – Shlomo
@Shlomo Reponseストリームに複数のイベント(上記のx y zなど)がある可能性がありますが、完了するとそれ以上のレスポンスはありません。 – asgerhallas