2012-02-24 5 views
0

私はTを返す長い実行同期関数を持つクラスを持っています。これをIObservableに変更して非同期にしたいのです。関数が実行されている間は何も起こりません。次にOnNext(T) - > OnCompleted()が実行されます。これを実装する最も簡単な方法は何ですか?<T>をIObservableにする方法<T>

次のような作品がありますが、私はもっと素敵なものが欠けていると思われます。

public IObservable<bool> TakesAWhile() 
    { 
    var s = new Subject<bool>(); 
    var worker = new BackgroundWorker(); 
    worker.DoWork += (sender, e) => 
     { 
      s.OnNext(foo.TakesAWhile()); 
      s.OnCompleted(); 
     }; 
    worker.RunWorkerAsync(); 
    return s.AsObservable<bool>(); 
} 

答えて

1

.Start()を使用してください。あなたのコードで

Func<int> fn =() => 42; 
IObservable<int> ofn = Observable.Start<int>(fn); 
ofn.Subscribe(n => 
{ 
    Console.WriteLine(n); 
}); 

あなたはこの探している:

IObservable<bool> TakesAWhile() 
{ 
    return Observable.Start<bool>(foo.TakesAWhile); 
} 
+0

パーフェクト、しかしスタートにスケジューラを追加

はこのような何かを試してみてください。 –

関連する問題