20

それは同等/より良い仕事ですか

機能的には同等のようですが、違いは「セマンティック」だと思います:

  • イベントの内部状態にアクセスすることが理にかなっている境界の内側にいますか?
  • それとも、このイベント インターフェイスを、ストリームが公開されたパッシブ ソースと見なしているのでしょうか。

それは正しい考え方ですか?

4

1 に答える 1

28

との主な違いはEventObservable状態とサブスクリプション解除の処理方法にあります。

  • イベント関数はソース イベントにアタッチされ、サブスクライブを解除する方法はありません。ステートフル コンビネーター ( などEvent.scan) を使用し、結果のイベントに複数のオブザーバーをアタッチすると、それらはすべて同じ状態になります。

  • 監視可能な関数は、処理パイプラインの「仕様」を構築します。ハンドラーをIObservablevalue にアタッチするIDisposableと、すべてのハンドラーを削除するために使用できる が返されます。に接続された各ハンドラーIObservableは、新しい状態を取得します (ランタイムが「仕様」に従って新しい処理チェーンを作成するため)。

実際には、主な違いは statfullness にあります-状態を共有したい場合は、Eventモジュールを使用できます-同じ使用を実装することObservableは可能ですが、より困難です。

内でイベントを使用している場合は、 (ビルトインの代わりに) andasyncを使用する必要があります。これは、イベント コンビネーターを使用するとメモリ リークが発生するためです。削除されないイベント ハンドラーがアタッチされます。ObservableAwaitObservableAwaitEvent

于 2013-03-21T14:08:43.773 に答える