private void OnOutputPushValue(KeySortedGroupSubject grp, TOut value) { lock (_syncLock) { base.PushValue(value); } }
private void OnOutputException(KeySortedGroupSubject grp, Exception exception) { lock (_syncLock) { base.PushException(exception); } }
private void OnSourcePush(TIn value) { if (CancellationToken.IsCancellationRequested) { return; } lock (_syncLock) { TKey key = _getKey(value); if (_currentGroup == null || !_currentGroup.Key.Equals(key)) { if (_currentGroup != null) { _currentGroup.PushSubject.Complete(); _currentGroup.PushSubject.Dispose(); } _currentGroup = new KeySortedGroupSubject { Key = key, FirstElement = value, PushSubject = new PushSubject <TIn>(base.CancellationToken) }; _currentGroup.OutputSubscription = _groupedObservableTransformation(_currentGroup.PushSubject, value).Subscribe( i => OnOutputPushValue(_currentGroup, i), () => OnOutputCompleted(_currentGroup), e => OnOutputException(_currentGroup, e) ); } _currentGroup.PushSubject.PushValue(value); } }
private void OnOutputCompleted(KeySortedGroupSubject grp) { lock (_syncLock) { _currentGroup?.OutputSubscription?.Dispose(); _currentGroup = null; TryComplete(); } }