创建一个重复调用某个方法的可观察对象



我想反复获得属性值并将其分配给另一个属性,但我还没有处理Rx的Observable创建。我如何创建和订阅一个可观察对象,只是不断读取一个属性(可能是定时器或节流)?

您可以使用静态Interval操作符在给定的时间范围内重复发出一个值,然后使用Select操作符将其转换为您希望轮询的对象的属性值。

var objectIWantToPoll = new MyObject(); 
var objectIWantToSetPropertyOn = new MyObject();

var polledValues =  Observable.Interval(TimeSpan.FromSeconds(1)) 
   .Select(_ => objectIWantToPoll.SomeProperty);
polledValues.Subscribe(propertyValue => 
   objectIWantToSetPropertyOn.SomeProperty = propertyValue));
public static IObservable<long> CreateObservableTimerWithAction(this Action actionT, int timeSpan, Control control)
    {
        var obs = Observable.Create<long>(
             observer =>
             {
                 Observable.Interval(TimeSpan.FromMilliseconds(timeSpan))
.DistinctUntilChanged(fg =>control.Text ).Subscribe(l => actionT());
                 return Disposable.Empty;
             });
        return obs;
    }

0 r:

public static IObservable<long> CreateObservableTimer<T>(this Action actionT,int timeSpan)
    {
       var obs= Observable.Create<long>(
            observer =>
            { 
                Observable.Interval(TimeSpan.FromMilliseconds(timeSpan))
.DistinctUntilChanged().Subscribe(l => actionT());
                return Disposable.Empty;
            });
        return obs;
    }

我经常使用这个,让定时方法在特定时间运行,直到我处置它们(obs.Dispose()).

CreateObservableTimer(() => CheckForDequeues(1),500);

我有时用长,但大多数时候,不…

甚至可以使用这个帮助器来检查优先级队列中的scheduler,因此可以用于

听起来您实际上是在要求一个轮询实现,其中一些组件轮询更改的值。可观察对象通常用于响应推送给你的对象(通过事件/可观察对象等),而不是拉取值。也许仅仅在计时器上设置一个后台进程并在计时器的Tick上操作就足够了。可观察到的。Interval的行为与James Hay提到的类似。小心可观察对象。Interval将把你的执行上下文从分派器线程移开。

为什么你要把Rx硬塞进你的轮询实现中?您是否有其他可观察数据源要在这里同步?

相关内容

  • 没有找到相关文章

最新更新