EDIT:
Извините, ваши комментарии имеют смысл. Это связано с требованиями потоков WPF. Вторая подписка должна происходить в потоке пользовательского интерфейса. Лучший способ для этого - изменить эту строку ...
RendererService.WhenRenderProgress.Subscribe(i =>
к этому ...
RendererService.WhenRenderProgress.ObserveOn(Application.Current.Dispatcher).Subscribe(i =>
После внесения этого изменения вы можете удалить вызовы SubscribeOn
и ObserveOn
по первой подписке.
Все это происходит потому, что Reactive IObservables не волнует, в каком потоке они наблюдаются. Если ваше событие начинается в фоновом потоке, и все операторы синхронны (что они здесь есть), то оно будет наблюдаться в том же потоке.
То, как вы это изложили, невозможно воспроизвести.
Если бы мне пришлось угадывать, я бы предположил, что в функции .Render
возникает какое-то исключение, которое взрывает первую подписку. Поскольку никакой другой подписки нет, остальная часть Observable.Create
никогда не происходит, так как наблюдаемые могут выполнять какие-либо действия только при наличии хотя бы одной подписки. Вторая подписка не подписана на создание наблюдаемой, это прослушивание побочного эффекта.
Я бы порекомендовал вам попробовать изменить первый звонок по подписке с
.Subscribe();
до
.Subscribe(item => {}, e => LogException(e));
или что-то в этом роде. Таким образом, вы можете увидеть, что происходит не так.