public bool TryAdd(ulong key, StarboardSource value) { try { _lock.EnterWriteLock(); return(Dictionary.TryAdd(key, value)); } finally { _lock.ExitWriteLock(); } }
public bool AddOrUpdate(ulong key, StarboardSource addValue, StarboardSource updateValue) { try { _lock.EnterWriteLock(); if (!Dictionary.TryAdd(key, addValue)) { Dictionary[key] = updateValue; return(false); } return(true); } finally { _lock.ExitWriteLock(); } }
public void Remove(ulong key, StarboardSource value) { try { _lock.EnterUpgradeableReadLock(); if (Dictionary.ContainsKey(key) && Dictionary[key] == value) { try { _lock.EnterReadLock(); Dictionary.Remove(key); } finally { _lock.ExitReadLock(); } } } finally { _lock.ExitUpgradeableReadLock(); } }
private static async Task UpdateStarsGivenInternalAsync(StarboardContext context, StarboardSource source, IAsyncEnumerable <IReadOnlyCollection <IUser> > starGivingUsers) { await starGivingUsers.ForEachAsync(async users => { foreach (IUser user in users) { if (user.Id != context.StarredMessage.Author.Id) { if (!context.MessageData.StarGivingUsers.AddOrUpdate(user.Id, source, StarboardSource.STARRED_MESSAGE)) { await context.RemoveReactionFromStarboardMessageAsync(user); } } else { await context.RemoveReactionAsync(user, source); } } }); }