internal static bool TryPush(ProducerConsumerQueue <T> target, T item) { Monitor.Enter(target.SyncRoot); try { if (target.IsAddingCompleted || target.Count == target.BoundedCapacity) { return(false); } target.Count++; if (target._firstElement == null) { target._firstElement = target._lastElement = new QueueItem(item); target._notEmptyEvent.Set(); } else { target._firstElement = target._firstElement._precedingElement = new QueueItem(item) { _followingElement = target._firstElement } }; if (target.Count == target.BoundedCapacity) { target._notFullEvent.Reset(); } } finally { Monitor.Exit(target.SyncRoot); } target.RaiseItemAdded(0, item); return(true); }