Reactive:将方法作为观察者函数参数传递

时间:2017-11-06 08:54:07

标签: c# .net system.reactive

我收到编译错误,因为我不太清楚如何做到这一点:

public IObservable<X> Gather()
{
    this.vizs = vizs;
    return Observable.Create<X>(this.GetXObserver());
}

getXObserver的位置:

private IDisposable GetQueryObserver(IObserver<X> observer)
{
    //...
    return System.Reactive.Disposables.Disposable.Empty;
}

如何设置我想在GetXObserver方法上使用Observable.Create(...)

我想要的是避免创建如下代码:

Observable.Create<X>(
    observer =>
    {
        //long code here
    }
);

我想稍微清理一下。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

public IObservable<X> Gather()
{
    return Observable.Create<X>((Func<IObserver<X>, IDisposable>)GetXObserver);
}

private IDisposable GetXObserver(IObserver<X> observer)
{
    return System.Reactive.Disposables.Disposable.Empty;
}

但它开始使代码更长和脱节。这是一个糟糕的设计。

在我看来,以下是更清洁的:

public IObservable<X> Gather()
{
    return Observable.Create<X>(o => System.Reactive.Disposables.Disposable.Empty);
}

那就是说,只要你回归System.Reactive.Disposables.Disposable.Empty,你就会做错事。如果你能展示真实的代码,那就太好了。