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。我的用例是我需要一個父容器來設置一個更新的標誌,如果其中的任何一個孩子被更新以響應一個事件。 –