2017-01-15 26 views
2

У меня есть Наблюдаемая из BlockCollection, что я использую как очередьРеактивная Наблюдаемая Подписки: Прекратить подписку и продление подписки

IObservable<ProcessHoldTransactionData> GetObservable() 
{  
    _queue.GetConsumingEnumerable().ToObservable(TaskPoolScheduler.Default); 
} 

и подписаться на него:

void StartSubscription() 
{ 
    _subscription = = GetObservable().Subscribe(
       data => OnNextSubscribe(data), 
       ex => _logger.Error("Error"), 
       () => _logger.Warn("Complete")); 
} 

теперь у меня есть еще один Observable:

var timer = Observable.Interval(TimeSpan.FromSeconds(60)); 
_subscriptionTimer = timer.Subscribe(tick => 
{ 
    OnTimerNextSubscribe(); 
}); 

Я хотел бы, если OnTimerNextSubscribe начните Остановить подписку _subscription и обновите ее, когда закончится надпись OnTimerNextSubscribe.

Какая у вас лучшая парактика?
Должен ли я распоряжаться _subscription и называют StartSubscription()

ответ

0

Там в основном два варианта: один для утилизации перезапустится, а другой, чтобы создать какой-то сигнал включения/выключения наблюдаемого, затем процеживают _subscription соответственно :

void StartSubscription(Observable<bool> onOffSignal) 
{ 
    _subscription = = GetObservable() 
     .WithLatestFrom(onOffSignal, (s, b) => b ? Observable.Return(s) : Observable.Empty(s)) 
     .Merge() 
     .Subscribe(
       data => OnNextSubscribe(data), 
       ex => _logger.Error("Error"), 
       () => _logger.Warn("Complete") 
     ); 
}