我有一些自定义事件参数:
AutoOccurPerformedEventArgs : EventArgs
并且在2个单独的位置引发了与这些事件args相同的事件我试图使用Reactive Extensions来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,事件处理正确(虽然单独)
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无效的任何想法?
答案 0 :(得分:2)
查看ForkJoin
方法的intellisense帮助。尽管有拼写错误,但它说:
并行运行两个可观察序列并组合它们的最后一个元素。
由于您正在对事件进行ForkJoin
,因此您将永远无法获得结果,因为这些类型的可观察事件永远不会完成。
您可能希望使用Merge
或CombineLatest
来达到您想要的效果,但由于您没有描述您的意图,我无法提供更好的建议。