3

だから私はRXで遊んで学んでいます。私はイベントをいじり始め、イベントをサブスクライブする方法と、結果をバッチで非同期的に処理する方法を知りたがっていました。コードで説明させてください:

イベントを発生させる単純なクラス:

public class EventRaisingClass
{
   public event EventHandler<SomeEventArgs> EventOccured;

   //some other code that raises event...
}

public class SomeEventArgs : EventArgs
{
    public SomeEventArgs(int data)
    {
        this.SomeArg = data;
    }

    public int SomeArg { get; private set; }
}

それから私のメイン:

public static void Main(string[] args)
{
    var eventRaiser = new EventRaisingClass();
    IObservable<IEvent<SomeEventArgs>> observable = 
        Observable.FromEvent<SomeEventArgs>(e => eventRaiser.EventOccured += e, e => eventRaiser.EventOccured -= e);

    IObservable<IList<IEvent<SomeEventArgs>>> bufferedEvents = observable.BufferWithCount(100);

    //how can I subscribte to bufferedEvents so that the subscription code gets called Async?
    bufferedEvents.Subscribe(list => /*do something with list of event args*/); //this happens synchrounously...

}

私のコメントでわかるように、そのように subscribe を呼び出すと、すべてのサブスクリプション コードが同期的に実行されます。作業するイベントの新しいバッチがあるときはいつでも、RX を使用して別のスレッドでサブスクライブを呼び出す方法はありますか?

4

2 に答える 2

2
bufferedEvents.ObserveOn(Scheduler.TaskPool).Subscribe(...

SubscribeOn は、いわゆる「サブスクリプションの副作用」が発生するスケジュールを指定することです。たとえば、オブザーバブルは、誰かがサブスクライブするたびにファイルを開くことができます。

ObserveOn は、新しい値があるたびにオブザーバーへの呼び出しが発生するスケジュールを指定することです。実際には、SubscribeOn よりも頻繁に使用されます。

于 2010-07-09T18:32:39.340 に答える
2

SubscribeOnまたはObserveOnを探していると思いますIScheduler。にはいくつかのスケジューラが組み込まれていSystem.Concurrencyます。現在のスレッドを使用するものもあれば、特定のスレッドを使用するものもあります。

このビデオでは、スケジューラの概念について詳しく説明しています。

Rx チームは最近、チュートリアルに最も近いハンズオン ラボドキュメントもリリースしました。

于 2010-07-09T17:41:59.653 に答える