Тайм-аут реактивных расширений, который не останавливает последовательность?

Я пытаюсь создать IObservable , который возвращает true , если сообщение UDP было получено за последние 5 секунд, и если произойдет тайм-аут, возвращается ложь.

На данный момент у меня есть следующее:

public IObservable<Boolean> GettingUDPMessages(IPEndPoint localEP)
{
    var udp = BaseComms.UDPBaseStringListener(localEP)
        .Where(msg => msg.Data.Contains("running"))
        .Select(s => true);

    return Observable
        .Timeout(udp, TimeSpan.FromSeconds(5))
        .Catch(Observable.Return(false));
}

Проблемы с этим: -

  • Как только возвращается ложь, последовательность останавливается
  • Мне действительно нужно только истина или ложь об изменении состояния.

Я мог бы использовать Subject , но мне нужно быть осторожным, чтобы избавиться от наблюдаемого UDPBaseStringListener , когда больше нет подписчиков.

Обновление

Каждый раз, когда я получаю сообщение UDP, я хочу, чтобы оно возвращало истину . Если я не получал сообщения UDP в течение последних 5 секунд, я бы хотел, чтобы оно возвращало false .

5
задан Tim 9 November 2011 в 12:24
поделиться