我有一个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);
此可观察对象的结果似乎总是错误的,因为Select()在ObservableAsPropertyHelper
更新LatestValue
之前运行,因此LatestValue
具有过时的值。
这是一个问题,因为我想在observable生成一个值时运行一个函数,而这个函数需要来自Calculate
的最新值。我不能从observable传递新值,它需要在变量中。
我考虑过执行Calculate
,然后等待使用LatestValue
更新WhenAnyValue
。然而,这很容易出错,因为更新可能是由先前的执行引起的,而且通常看起来很糟糕。
解决此问题的最佳方法是什么?
答案 0 :(得分:1)
听起来最好的解决方案是在WhenAnyValue
属性上使用LatestValue
。这样你就可以随时获得最新的价值。
正如你所提到的那样,你得到一个竞争条件,我认为最好避免同时做不完全相同的工作。让OAPH设置并从中开始工作。
您可能希望跳过WhenAnyValue
(带Skip(1)
)的第一个信号,因为该属性的当前值会立即返回。