Вы хотите обрабатывать каждое сообщение в одной и той же цепочке и блокировать цепочку до тех пор, пока не прибудет следующее сообщение - это очень распространенная парадигма, называемая Событие L oop.
И, как выясняется, вы можете запускать вещи в событии l oop в Rx с соответствующим именем EventLoopScheduler
.
var values = Observable.Interval(TimeSpan.FromSeconds(0.1));
void DoSomething(long value) => Console.WriteLine($"Value: {value}, Thread: {Thread.CurrentThread.Name}");
var eventloop = new EventLoopScheduler();
values.ObserveOn(eventloop).Subscribe(DoSomething);
Выход:
Value: 0, Thread: Event Loop 1
Value: 1, Thread: Event Loop 1
Value: 2, Thread: Event Loop 1
Value: 3, Thread: Event Loop 1
Value: 4, Thread: Event Loop 1
Value: 5, Thread: Event Loop 1
Value: 6, Thread: Event Loop 1
Value: 7, Thread: Event Loop 1