订阅前运行ToProperty

问题描述 投票:0回答:1

我有一个ReactiveCommand,它产生一个整数作为输出。

public ReactiveCommand<Unit, int> Calculate { get; }

此命令的最新结果使用ObservableAsPropertyHelper存储在变量中

private readonly ObservableAsPropertyHelper<int> _latestValue;
public int LatestValue => _latestValue.Value;
...
Update.ToProperty(this, vm => vm.LatestValue, out _latestValue);

每次运行Calculate时,其输出都存储在LatestValue中。但是,当我做这样的事情时,我遇到了一个问题:

anotherObservable.SelectMany(_ => Calculate.Execute())
    .Select(value => value == LatestValue);

这个可观察的结果似乎总是错误的,因为在ObservableAsPropertyHelper更新LatestValue之前运行Select(),因此LatestValue有一个过时的值。

这是一个问题,因为我想在observable生成一个值时运行一个函数,而这个函数需要来自Calculate的最新值。我无法从observable传递新值,它需要在变量中。

我想做一些事情,比如执行Calculate,然后等待使用LatestValue更新WhenAnyValue。然而,这容易出错,因为更新可能是由先前的执行引起的,并且通常看起来像是糟糕的设计。

解决这个问题的最佳方法是什么?

c# .net system.reactive reactive-programming reactiveui
1个回答
1
投票

听起来最好的解决方案是在WhenAnyValue属性上使用LatestValue。这样你就可以随时获得最新的价值。

正如你所提到的那样,你会遇到一个竞争条件,我认为最好不要同时做同样的工作。让OAPH设置并从中开始工作。

您可能希望跳过WhenAnyValue的第一个信号(使用Skip(1)),因为该属性的当前值会立即返回。

© www.soinside.com 2019 - 2024. All rights reserved.