protected virtual void OnCollectionChanged(DictionaryChangedEventArgs <TKey, TValue> changeAction)
        {
            var tasks = new List <Task> {
                Task.Run(() => CollectionChanged?.Invoke(this, changeAction))
            };

            if (changeAction.Action != NotifyCollectionChangedAction.Reset &&
                _observers.TryGetValue(changeAction.Key, out var observers))
            {
                tasks.AddRange(observers.Select(o => Task.Run(() => o.OnEventOccur(changeAction))));
            }

            Task.WaitAll(tasks.ToArray());
        }
 public void OnEventOccur(DictionaryChangedEventArgs <TKey, TValue> args)
 {
     _action.Invoke(args);
 }