Реактивный метод для объединения свойств в списке в одну наблюдаемую - PullRequest
0 голосов
/ 06 марта 2020

Мы изо всех сил пытаемся найти подходящий метод для объединения значения свойства из списка элементов в один наблюдаемый элемент. Вот пример кода (упрощенно):

public class Result {
  public ISubject<bool> Completed { get; }
}

public void SignalWhenAllIsDone(){
  List<Result> list = GetListOfResults(); //not important

  // somehow merge the list and the Completed property into a single observable
  IObservable<bool> allCompleted = ???;

  allCompleted.Subscribe(x => {
    Console.WriteLine("all results have completed");
  });  
}

Мы думаем, что в реактивном наборе инструментов есть некоторые маги c, которые могут подписаться на все Completed предметы и объединить / оценить / сжать их в единственная наблюдаемая, которую мы можем использовать. Мы занимались ручным ведением бухгалтерии, но наши инстинкты говорят нам, что это может помочь в реагировании.

Любая помощь?

1 Ответ

1 голос
/ 06 марта 2020

Почти все методы расширения для объединения Observables обеспечивают перегрузку, когда они принимают IEnumerable , Это должно соответствовать вашим требованиям:

IObservable<bool> allCompleted = Observable.CombineLatest(
              list.Select(res => res.Completed),
              completedValuesList => completedValuesList.All(isCompleted => isCompleted);

В качестве дополнения к этому ответу я хочу сообщить вам о DynamicData . При этом вы также можете написать запрос к специальному списку, который дает вам действительный allCompleted-Observable, даже когда список изменяется.

...