我有一个类(我无法控制),它有一个长时间运行的同步函数,它返回T.我希望通过将其更改为一个IObservable使其异步,该函数在函数运行时无效,然后OnNext( T) - > OnCompleted()。实现这个的最简单方法是什么?
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>();
}
答案 0 :(得分: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);
}