我有麻煩服用無擴展主題爲<IEnumerable的<Obj>>以主題爲<IEnumerable的<AggregatedObj >>
public Subject<IEnumerable<Person>> PersonDataSubject;
對象並將其轉換爲:
public Subject<IEnumerable<BornInYear>> BornInYearSubject;
...使用一些linq聚合。
下面的例子將它放在更多的上下文中,我掙扎的地方在於如何從PersonDataSubject的訂閱中獲取一個IEnumerable到BornInYearSubject中。
無論我嘗試什麼,我最終得到IObservable<BornInYear>
,而不是IObservable<IEnumerable<BornInYear>>
。
目標是讓該類的客戶能夠訂閱兩個主題,並在每個「下一個」通知中獲得相應類型的IEnumerable。
public class ReactiveTest
{
public class Person
{
public string name;
public DateTime dob;
};
public class BornInYear
{
public int Year;
public int Count;
}
public Subject<IEnumerable<Person>> PersonDataSubject = new Subject<IEnumerable<Person>>();
public Subject<IEnumerable<BornInYear>> BornInYearSubject= new Subject<IEnumerable<BornInYear>>();
public void LoadData()
{
// Go to hypotheritical web service and get batch of people.
IEnumerable<Person> people = WebService.Fetch();
// Notify subscribers we have a fresh batch of data.
PersonDataSubject.OnNext(people);
}
public ReactiveTest()
{
// Hookup BornInYearSubject to listen to PersonDataSubject and publish the summarised data.
PersonDataSubject.Subscribe(pd => pd.GroupBy(p => p.dob.Year)
.Select(ps => new BornInYear { Year = ps.Key, Count = ps.Count()})
.AsParallel()
);
// How do I get the results of this out and published onto BornInYearSubject?
}
}
現在我知道我可以使用Task.Factory.StartNew(...)...
爲實現這個我訂閱OnNext爲PersonDataSubject但我相信它必須能夠保持更多的反應?
這有什麼錯用的IObservable>? –
2011-06-03 17:20:02