Observables
Observableはイベントのソースとして機能するため、サブスクリプションの作成が可能となります。RxとIRPの関係は以下の通りです。
Observables act as sources of events, thus enabling the creation of a subscription. The relationship between Rx and IRP is as follows:
code:C#
// Rx
interface IObservable<out T>
{
IDisposable Subscribe(IObserver<T> observer);
}
// IRP
interface IAsyncReactiveQbservable<out T> : IExpressible
{
Task<IAsyncReactiveQubscription> SubscribeAsync(Uri subscriptionId, IAsyncReactiveQbserver<T> observer);
}
Asyncサフィックスの追加、戻り値の型にTask<T>の使用、外部識別子subscriptionIdの導入に加えて、これらのインターフェースは同型です。
Besides the addition of an Async suffix, the use of Task<T> for the return type, and the introduction of an extrinsic identifier subscriptionId, the interfaces are isomorphic.
一般的に「クエリ演算子」と呼ばれるものは、0個以上のパラメータを与えると観測可能なシーケンスを返す関数の集まりに過ぎません。その例は以下の通りです。
What’s commonly referred to as “query operators” is merely a collection of functions that given zero or more parameters return an observable sequence. Examples include:
code:C#
// Produces an empty event sequence.
IObservable<T> Empty<T>();
// Produces an event sequence that emits an event at the specified due time.
IObservable<long> Timer(DateTimeOffset dueTime);
// Produces an event sequence that will emit events from the source sequence that pass the predicate.
IObservable<T> Where<T>(IObservable<T> source, Func<T, bool> predicate);
// Produces an event sequence that emits transformed events from the source sequence.
IObservable<R> Select<T, R>(IObservable<T> source, Func<T, R> selector);
// Produces an event sequence that concurrently merges the events received from the selected source sequences.
IObservable<R> SelectMany<T, R>(IObservable<T> source, Func<T, IObservable<R>> selector);
Subscribe メソッドは、observable シーケンスと observer インスタンスを与えると subscription オブジェクトを返す関数なので、実質的には「サブスクリプションファクトリ」であることに注意してください。IRPにサブスクリプション・ファクトリが導入されたことで、オブザーバは実際には特別な種類のサブスクリプション・ファクトリに降格しました。
Note that the Subscribe method is effectively a “subscription factory” because it’s a function that given an observable sequence and an observer instance returns a subscription object. With the introduction of subscription factories in IRP, observables have actually been demoted to a special kind of subscription factory.
code:C#
IDisposable Subscribe<T>(IObservable<T> observable, IObserver<T> observer);