Пример #1
0
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         _versions = QueryDataVersions.Empty;
         _processingBlock.Complete();
     }
 }
Пример #2
0
        public void UpdateVersions(ImmutableDictionary <string, long> versions)
        {
            lock (SyncObject)
            {
                _versions = QueryDataVersions.Empty.AddRange(versions);

                PostVersionUpdate();
            }
        }
Пример #3
0
        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);
                        }
                    });
                }
            }
        }