IObservable.Subscribe(IObserver <T>オブザーバー)オーバーロードとは何ですか?

ジャック・ウクレジャ

.Subscribe式を書いているときに、Resharperがmscorlib、Version = 4.0.0.0にある次のオーバーロードを選択していることに気付くことがよくあります。

namespace System
{
  public interface IObservable<out T>
  {
    IDisposable Subscribe(IObserver<T> observer);
  }
}

これは、をとるほとんどのオーバーロードとは非常に異なっているように見えます。Actionまた、mscorlibからのSystem.Reactive.*ものであり、ほとんどのReactiveのものが期待される場所ではありません

この過負荷は何をしますか?どのように使用する必要がありますか?どのようにIObserver<T>関係していActionますか?そして、なぜこの単一のオーバーロードがmscorlibにあるのですか?

シュロモ

明確にするために、それは過負荷ではありません、それは本当にRxのコアです。Subscribeあなたが慣れている他のすべてメソッド、そしてそのことに関する他のすべての演算子は、実際にはそれを最終的に呼び出す拡張メソッドです。

初期のドキュメントまたはRxを見ると、作成者がそれをLINQのプッシュベースの側面と見なしていることがわかります。つまり、多くのものは、LINQに表示されるものの鏡像です。IObservable鏡であるIEnumerable、とIObserverの鏡ですIEnumerator

ただし、プッシュはプルの反対であるため、Rxバージョンはプルベースのバージョンの反対です。

  • IEnumerableを生成する1つのメソッドを定義しますIEnumeratorIObservable一つの方法定義を取り込みますIObserver
  • IEnumerator.MoveNext()+IEnumerator.Currentを1つの操作と考えると、次の要素が返される、コレクションの終わりに達する、または例外がスローされるという3つの方法のいずれかで戻ることができます。同様に、IObserverは、次の要素(OnNext)、ストリームの終わり(OnCompleted)、または例外(OnError)の3つのケースを処理する必要があります。

よりよく知られている「オーバーロード」はSubscribe、実際は次のような拡張メソッドにすぎません。

public static IDisposable Subscribe<T>(this IObservable<T> source, Action<T> onNext)
{
    return Subscribe(onNext, e => {/*onError */}, () => {/*onCompleted*/);
}

public static IDisposable Subscribe<T>(this IObservable<T> source, Action<T> onNext, Action<Exception> onError, Action onCompleted)
{
    source.Subscribe(new AnonymousObserver<T>(onNext, onError, onCompleted));
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

IObservableとIObserverを分離する方法

分類Dev

IObservable <T>をIObservable <IObservable <T >>に分割します

分類Dev

Turn an IObservable<IEnumerable<T>> into an IEnumerable<IObservable<T>>

分類Dev

IObservable <(long、float)>をIObservable <long>とIObservable <float>の2つのオブザーバブルに分割します

分類Dev

IObservable <IEnumerable <T >>は本当にIObservable <T>である必要がありますか?

分類Dev

オブザーバブルなしの.subscribe()と最新の角度でオブザーバブルありの.subscribe()の違いは何ですか?

分類Dev

IObserverを複数のIObservableインスタンスに割り当てます

分類Dev

IObservable <T>からタスクへ

分類Dev

IObservable<Task<T>> を順序保持で IObservable<T> にアンラップする

分類Dev

IObservable <IEnumerable <T >>을 IEnumerable <IObservable <T >>로 변환

分類Dev

Spit IObservable<T> exceptions in a separate IObservable<Exception> and continue normally

分類Dev

IEnumerable <T>やIObservable <T>のようなプッシュベースの構造とプルベースの構造の違いは何ですか

分類Dev

IObservable <T>からデータグリッドを自動的に更新する方法

分類Dev

Converting a IEnumerable<T> to IObservable<T>, with maximum parallelism

分類Dev

IObservable <int>を使用してIObservable <T>をさまざまな長さのIObservable <T []>にセグメント化する方法

分類Dev

IObservable <T>をIAsyncEnumerable <T>に変換することは可能ですか?

分類Dev

IObservable <T>例外を別のIObservable <Exception>に吐き出し、通常どおり続行します

分類Dev

IObservableをスロットリングすると、オブザーバーが呼び出されなくなります

分類Dev

別のオブザーバブルの.subscribe関数からオブザーバブルを返す

分類Dev

IObservable <T> .ToTask拡張メソッドはどこにありますか?

分類Dev

最大の並列処理でIEnumerable <T>をIObservable <T>に変換する

分類Dev

例外処理を除いて、IEnumerable <Task <T >>をIObservable <T>に変換します

分類Dev

RXJSオブザーバブルのメソッド.pipe()と.subscribe()の違い

分類Dev

C ++で演算子をオーバーロードする場合、ブール値よりもT *が優先されるのはなぜですか?

分類Dev

weblogicサーバーのt3プロトコルとは何ですか?

分類Dev

IObservableを実装する方法

分類Dev

linqクエリを使用したIObservable <T>

分類Dev

IObservable <MyObject>をIObservable <bool>に変換します

分類Dev

size_t型で使用するための正しい整数オーバーフロー組み込みは何ですか

Related 関連記事

  1. 1

    IObservableとIObserverを分離する方法

  2. 2

    IObservable <T>をIObservable <IObservable <T >>に分割します

  3. 3

    Turn an IObservable<IEnumerable<T>> into an IEnumerable<IObservable<T>>

  4. 4

    IObservable <(long、float)>をIObservable <long>とIObservable <float>の2つのオブザーバブルに分割します

  5. 5

    IObservable <IEnumerable <T >>は本当にIObservable <T>である必要がありますか?

  6. 6

    オブザーバブルなしの.subscribe()と最新の角度でオブザーバブルありの.subscribe()の違いは何ですか?

  7. 7

    IObserverを複数のIObservableインスタンスに割り当てます

  8. 8

    IObservable <T>からタスクへ

  9. 9

    IObservable<Task<T>> を順序保持で IObservable<T> にアンラップする

  10. 10

    IObservable <IEnumerable <T >>을 IEnumerable <IObservable <T >>로 변환

  11. 11

    Spit IObservable<T> exceptions in a separate IObservable<Exception> and continue normally

  12. 12

    IEnumerable <T>やIObservable <T>のようなプッシュベースの構造とプルベースの構造の違いは何ですか

  13. 13

    IObservable <T>からデータグリッドを自動的に更新する方法

  14. 14

    Converting a IEnumerable<T> to IObservable<T>, with maximum parallelism

  15. 15

    IObservable <int>を使用してIObservable <T>をさまざまな長さのIObservable <T []>にセグメント化する方法

  16. 16

    IObservable <T>をIAsyncEnumerable <T>に変換することは可能ですか?

  17. 17

    IObservable <T>例外を別のIObservable <Exception>に吐き出し、通常どおり続行します

  18. 18

    IObservableをスロットリングすると、オブザーバーが呼び出されなくなります

  19. 19

    別のオブザーバブルの.subscribe関数からオブザーバブルを返す

  20. 20

    IObservable <T> .ToTask拡張メソッドはどこにありますか?

  21. 21

    最大の並列処理でIEnumerable <T>をIObservable <T>に変換する

  22. 22

    例外処理を除いて、IEnumerable <Task <T >>をIObservable <T>に変換します

  23. 23

    RXJSオブザーバブルのメソッド.pipe()と.subscribe()の違い

  24. 24

    C ++で演算子をオーバーロードする場合、ブール値よりもT *が優先されるのはなぜですか?

  25. 25

    weblogicサーバーのt3プロトコルとは何ですか?

  26. 26

    IObservableを実装する方法

  27. 27

    linqクエリを使用したIObservable <T>

  28. 28

    IObservable <MyObject>をIObservable <bool>に変換します

  29. 29

    size_t型で使用するための正しい整数オーバーフロー組み込みは何ですか

ホットタグ

アーカイブ