如何将同步函数<T>转换为 IObservable<T>



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

相关内容

  • 没有找到相关文章

最新更新