WhenAnyValue:如何在select中调用异步函数

时间:2019-09-02 02:57:05

标签: reactive-programming reactive reactiveui

在构造函数中设置我的可观察对象时,如何在转换/选择函数期间调用异步函数或返回IObservable的函数?

我已经尝试过在select函数中进行各种排列,但是它们都会导致编译器错误。

在构造函数中:

this.WhenAnyValue(k => k.BaseProperty).Select(j => ObjectHelpers.GetAnotherValueThatReturnsObservable(j)).Select(m => m)
          .ToProperty(this, k=> k.PropertyToUpdate, out this.OaPHProperty, initialValue: false);

其他功能

IObservable<bool> ObjectHelpers.GetAnotherValueThatReturnsObservable(j)
{
...this returns an IObservable that is used to update a property whenever BaseProperty changes. 
}

这是错误消息     无法从用法中推断出方法'OAPHCreationHelperMixin.ToProperty(IObservable,TObj,Expression>,ObservableAsPropertyHelper,TRet,bool,IScheduler)'的类型参数。尝试显式指定类型参数。

1 个答案:

答案 0 :(得分:2)

SelectMany方法包含用于处理任务和异步方法的重载。它具有可以处理取消的重载。如果您使用此方法而不是“选择”,它将解决您的问题。

另一种替代方法是使用.Select(Observable.FromAsync(...method...).Switch()。这种方法将选择一个新的可观察对象。开关将自动处理旧值