protected override void Dispose(bool disposing) { if (disposing) { _versions = QueryDataVersions.Empty; _processingBlock.Complete(); } }
public void UpdateVersions(ImmutableDictionary <string, long> versions) { lock (SyncObject) { _versions = QueryDataVersions.Empty.AddRange(versions); PostVersionUpdate(); } }
private void PostVersionUpdate() { lock (SyncObject) { if (IsInitialized) { _processingBlock.Post(() => { ImmutableHashSet <IObserver <QueryDataSourceChangeNotification> > observers; QueryDataVersions newVersions; lock (SyncObject) { if (_latestPostedVersions == _versions) { return; } observers = _observers; newVersions = _versions; _processedNotificationCount++; } if (observers.Count == 0) { return; } List <string>?expiredSources = null; foreach (string versionKey in _latestPostedVersions.Keys) { if (!newVersions.ContainsKey(versionKey)) { expiredSources ??= new List <string>(); expiredSources.Add(versionKey); } } _latestPostedVersions = newVersions; QueryDataSourceChangeNotification notification = new(newVersions, expiredSources?.ToImmutableArray()); foreach (IObserver <QueryDataSourceChangeNotification> observer in observers) { observer.OnNext(notification); } }); } } }