public object GetValue(int id) { ValueWaiter waiter = CreateOrGetWaiter(id); //waiter = list.GetOrAdd(id, waiter); var result = waiter.GetValue(); dictWaiters.Remove(id, out _); return(result); }
private ValueWaiter CreateOrGetWaiter(int id) { ValueWaiter waiter; lock (listLocker) { if (dictWaiters.ContainsKey(id)) { waiter = dictWaiters[id]; } else { waiter = new ValueWaiter(); } dictWaiters.TryAdd(id, waiter); } return(waiter); }