/// <summary> /// Enqueues the <paramref name="value"/>. /// </summary> /// <param name="value">The value to enqueue.</param> public void Enqueue(T value) { _queue.Enqueue(value); ValueEnqueued?.Invoke(value); DequeueExcessValues(); }
/// <summary> /// Tries to enqueue new value and returns success status. Locks the queue after adding a new element if the queue reaches its maximum size. /// </summary> /// <param name="value">Value to enqueue.</param> /// <returns>True if value was successfully enqueue or false otherwise.</returns> public bool TryEnqueue(T value) { lock (_lockGuard) { if (!_queueLocked) { _queue.Enqueue(value); ValueEnqueued?.Invoke(); if (_queue.Count >= _size) { _queueLocked = true; } return(true); } return(false); } }