0
我有一些自定义事件参数工作这些,然后订阅的Rx ForkJoin不与自定义事件
var events = new[]
{
Observable.FromEvent<AutoOccurPerformedEventArgs>(viewModel1, "AutoOccurActionPerformed"),
Observable.FromEvent<AutoOccurPerformedEventArgs>(viewModel2, "AutoOccurActionPerformed"),
};
events.ForkJoin().Subscribe(op => IsUpdatedByAutoOccur = op.Any(observedItem => observedItem.EventArgs.IsUpdatedByAutoOccur));
我的匿名委托在订阅永远不会被调用。没有例外,代表只是从来没有被调用。
但是,如果我订阅的每个事件独立,不ForkJoin,该事件被正确地处理(尽管seperately)
Observable.FromEvent<AutoOccurPerformedEventArgs>(viewModel1, "AutoOccurActionPerformed")
.Subscribe(o => IsUpdatedByAutoOccur = o.EventArgs.IsUpdatedByAutoOccur ? true : IsUpdatedByAutoOccur);
Observable.FromEvent<AutoOccurPerformedEventArgs>(viewModel2, "AutoOccurActionPerformed")
.Subscribe(o => IsUpdatedByAutoOccur = o.EventArgs.IsUpdatedByAutoOccur ? true : IsUpdatedByAutoOccur);
任何想法,为什么ForkJoin不工作?
我完全错过了。使用Zip和CombineLatest都可以做到这一点。谢谢。 –
@Ciaran - 确保你得到你需要的语义。如果两个来源不总是产生值配对值,'Zip'确实可以很快变得不稳定。如果一个序列产生一个额外的值,那么'Zip'总是不合适的。另一方面'CombineLatest'将总是产生两个数值,如果你的两个数据源成对产生数值并且这两个数值中的一个将是一个“先前数值”和“当前数值”对。 “Zip”和“CombineLatest”都不可能满足您的需求。 – Enigmativity
感谢您的评论。两个*都应该总是产生价值,但我也可以采取防御行动并使用CombineLatest。我的用例是我需要一个父容器来设置一个更新的标志,如果其中的任何一个孩子被更新以响应一个事件。 –