示例#1
0
        /// <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);
            }
        }
示例#2
0
 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
     });
 }
示例#3
0
        public void Enqueue(T item)
        {
            _InternalQueue.Enqueue(item);

            if (Count == MaximumSize)
            {
                _InternalQueue.TryDequeue(out T _);
            }
            else
            {
                Interlocked.Increment(ref _Count);
            }

            ItemEnqueued?.Invoke(this, item);
        }
示例#4
0
 public void Enqueue(T elem)
 {
     m_Queue.Enqueue(elem);
     ItemEnqueued?.Invoke(this, new EventArgs());
 }
示例#5
0
 private void OnItemEnqueued(ItemEnqueuedEventArgs <T> item)
 {
     ItemEnqueued?.Invoke(this, item);
 }
示例#6
0
 private void OnItemEnqueued()
 {
     ItemEnqueued?.Invoke(this, EventArgs.Empty);
 }
示例#7
0
 protected virtual void OnItemEnqueued(T item)
 {
     ItemEnqueued?.Invoke(this, item);
 }