/// <summary> /// Use in place of CollectionChanged Adder /// </summary> /// <param name="objTag">Tag to associate with added delegate</param> /// <param name="funcDelegateToAdd">Delegate to add to CollectionChanged</param> /// <returns>True if delegate was successfully added, false if a delegate already exists with the associated tag.</returns> public async ValueTask <bool> AddTaggedCollectionChangedAsync(object objTag, NotifyCollectionChangedEventHandler funcDelegateToAdd) { IAsyncDisposable objLocker = await LockObject.EnterWriteLockAsync(); try { (bool blnSuccess, HashSet <NotifyCollectionChangedEventHandler> setFuncs) = await _dicTaggedAddedDelegates.TryGetValueAsync(objTag); if (!blnSuccess) { setFuncs = new HashSet <NotifyCollectionChangedEventHandler>(); await _dicTaggedAddedDelegates.AddAsync(objTag, setFuncs); } if (setFuncs.Add(funcDelegateToAdd)) { base.CollectionChanged += funcDelegateToAdd; return(true); } } finally { await objLocker.DisposeAsync(); } Utils.BreakIfDebug(); return(false); }