我有一个类(我无法控制),它有一个长时间运行的同步函数,该函数返回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>();
}
很简单,只需使用.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);
}