找到了一个很好的 SO question 来显示用法,但对我来说,Plan and Pattern 的总体目的是创建一个可观察的组合单元,而不是组合的可观察单元。语义,我知道,但对我来说,使用这种语法似乎比其他各种“加入”方法更容易一些。它允许您将连接与投影完全分开,因此您可以存储中间计划并随时将它们与其他可观察对象组合。
例如:
// Suppose we have observables o1, o2, ..., o9.
// All IObservable<int>.
var o1and2 = o1.And(o2); // Store this bad boy for later use. Pattern<int, int>
var o5and6and9 = o5
.And(o6)
.And(o9)
.Then((t1, t2, t3) => t1 + t2 + t3); // Plan<int>
var o3and7 = o3
.And(o7)
.Then((t1, t2) => string.Format("Result: {0}", t1 + t2)); // Plan<string>
var o12ando8and6 = o1and2
.And(o8)
.And(o6)
.Then((t1, t2, t3, t4) => ((decimal) t1, t2, t3.ToString(), t4));
// Plan<(decimal, int, string, int)>
// "When" groups similar results together.
// It will fire when any of the Patterns give a result.
var obs1 = Observable
.When(o1and2.Then((t1,t2) => t1+t2), o5and6and9); // IObservable<int>
var obs2 = Observable.When(o3and7); // IObservable<string>
var obs3 = Observable.When(o12ando8and6); // IObservable<(decimal, int, string,int)>
SO 文章:
Reactive Extensions for .NET (Rx): Take action once all events are completed
另外,找到了一个 RX 文档,它实际上有助于理解如何使用它:http://www.clipcode.net/mentoring/RxReferenceLibrary.pdf [dead]