/// <summary> /// Enqueues item, thread-safe /// </summary> /// <param name="item">item to enqueue</param> public void Enqueue(T item) { while (Interlocked.CompareExchange(ref synLock, 1, 0) != 0) { Thread.SpinWait(1); } queue.Enqueue(item); if (queue.Count >= MaxQueueSize) { queue.Dequeue(); if (QueueOverflow != null) { QueueOverflow(this, new EventArgs()); } } Interlocked.Decrement(ref synLock); if (ItemEnqueued != null) { ItemEnqueued.BeginInvoke(this, new EventArgs(), null, null); } }
private void OnItemEnqueued(string item) { // Se levanta el evento ItemEnqueued, que será manejado por el delegado // que hemos asociado en el constructor. ItemEnqueued?.Invoke(this, new ItemEventArgs <string> { Item = item }); }
public void Enqueue(T item) { _InternalQueue.Enqueue(item); if (Count == MaximumSize) { _InternalQueue.TryDequeue(out T _); } else { Interlocked.Increment(ref _Count); } ItemEnqueued?.Invoke(this, item); }
public void Enqueue(T elem) { m_Queue.Enqueue(elem); ItemEnqueued?.Invoke(this, new EventArgs()); }
private void OnItemEnqueued(ItemEnqueuedEventArgs <T> item) { ItemEnqueued?.Invoke(this, item); }
private void OnItemEnqueued() { ItemEnqueued?.Invoke(this, EventArgs.Empty); }
protected virtual void OnItemEnqueued(T item) { ItemEnqueued?.Invoke(this, item); }