вы можете использовать семафор, который гарантирует, что, пока IObservable<byte[]>
готовится к IObservable<XDocument>
, смена наблюдателя не происходит.
псевдокод, как это можно сделать (не тестирование)
System.Threading.ReaderWriterLockSlim criticalSection
= new System.Threading.ReaderWriterLockSlim(...);
... converting from `IObservable<byte[]>` to `IObservable<XDocument>`
criticalSection.EnterReadLock();
Call IObservable<XDocument>
criticalSection.ExitReadLock();
.... replacing IObservable<XDocument>
criticalSection.EnterWriteLock();
Call change IObservable<XDocument>
criticalSection.ExitWriteLock();
Редактировать: с помощью Call IObservable<XDocument>
> What exactly do you mean with the line `Call IObservable<XDocument>`?
Я интерпретирую ваше предложение
> I have an `IObservable<byte[]>` that I transform
> into an `IObservable<XDocument>` using some intermediate steps...
, что вы зарегистрировали обработчик событий для IObservable<byte[]>
, который создает XDocument
из byte[]
и затем вызывает что-то, что вызывает событие для IObservable<XDocument>
.
Call IObservable<XDocument>
означает код, который запускает последующее событие