2012-02-24 25 views
0

我有一個類(我無法控制),它有一個長時間運行的同步函數返回T.我想通過將其更改爲IObservable來實現此異步當函數正在運行,然後OnNext(T) - > OnCompleted()時什麼都不會。實現這個最簡單的方法是什麼?如何將一個同步功能<T>轉換爲IObservable <T>

class Foo 
{ 
    bool TakesAWhile(); 
} 

class FooWrapper 
{ 
    Foo foo; 
    IObservable<bool> TakesAWhile() 
    { 
    // What goes here? 
    } 
} 

以下的工作,但我懷疑我缺少更好的東西。

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

完美,調度添加到開始雖然。 – 2012-02-24 06:44:35

相關問題