Критические изменения Rx

#system.reactive

#system.реактивный

Вопрос:

Я знаю, что у SL5 есть новое свойство для подсчета щелчков мыши, но с помощью я заставил это работать, когда вышел SL4. Теперь я перешел на новую машину, загрузил RX, и я понимаю, что RX претерпел несколько изменений, которые нарушили этот код. Я пытался, но, похоже, не могу перейти от перехода к FastSubject.

Мне бы очень хотелось полностью понять использование Subject здесь и как обновить вызов для работы с текущей версией Rx.

 public static IObservable<TSource> MonitorForDoubleClicks<TSource>(this IObservable<TSource> source, TimeSpan doubleClickSpeed, IScheduler scheduler)
{
  return source.Multicast<TSource, TSource, TSource>(
      () => new FastSubject<TSource>(), 
      values =>
      {
        return values
            .TimeInterval(scheduler)  //injects a timestamp event arguments
            .Skip(1)                  // in order to determine an interval we need two of these, so this keeps the event in the collection, but does not process the first one in
            .Where(interval => interval.Interval <= doubleClickSpeed)     //second event has arrived, so we can test the interval
            .RemoveTimeInterval()                                         //take the time argument out of the event args
            .Take(1)                                                      //we take one of the events (the latest) and throw it
            .Repeat();                                                    //keep the observer alive forever
      });
  

Ответ №1:

FastSubject теперь просто Subject, все субъекты быстрые 🙂 Однако это странный способ проверки наличия двойных щелчков.

Как насчет просто (предупреждение: кодирование через текстовую область):

 return source.Timestamp(scheduler)
    .Buffer(/*buffer of*/2, 1 /*advanced at a time*/)
    .Where(x => x[1].Timestamp - x[0].Timestamp < doubleClickSpeed)
    .Select(x => x[1]);