2016-09-19 2 views
2

У меня есть наблюдаемый, который посылает данные с фиксированной скоростью каждые 2 секунды некоторому наблюдателю. Я хочу, чтобы по прошествии 2 минут наблюдаемые, которые отправляют данные, будут уничтожать себя после того, как расскажут предмет, который он завершил. Я использую 2 таймера один для испускания данных для 2-секундных интервалов, а другой для общей продолжительности в 2 минуты, чтобы он мог отправить OnComplete. Мне было интересно, есть ли способ самостоятельно распоряжаться собой через 2 минуты после таймера?Как я могу избавиться от наблюдаемого после установленного времени?

мой код выглядит примерно так:

Observable.Create<>(
    observer => 
    { 
     var timer = new Timer(); 
     timer.Elapsed += (s, e) => observer.OnNext(*send some string*); 
     timer.start(); 
     return Disposable.Empty; 
    } 
) 

ответ

5

Это действительно довольно просто. Просто выполните это:

Observable 
    .Interval(TimeSpan.FromSeconds(2.0)) 
    .TakeUntil(Observable.Timer(TimeSpan.FromMinutes(2.0))) 
    .Subscribe(x => 
    { 
    }); 

Это автоматически прекратит наблюдение через 2 минуты и сделает все отписки для вас.

+0

Я смотрел на [это] (http://reactivex.io/documentation/operators/takeuntil.html). Похоже, он не разрушает источник Observable, если я не ошибаюсь? Я надеялся, что был бы способ уничтожить источник, наблюдаемый после отметки 2 мин. – Armagetin

+1

@ Армагетин - Да, он разрушает наблюдаемый источник. Каждая подписка создает экземпляр всего конвейера, и как только подписка идет, так и трубопровод. – Enigmativity

+0

Спасибо за помощь! – Armagetin

Смежные вопросы