Example #1
0
 public void Enqueue(ref T data, OnWorkItemComplete <T> onComplete = null)
 {
     lock (Queue) {
         ManageDrain();
         Queue.Enqueue(new InternalWorkItem <T>(this, ref data, onComplete));
     }
 }
Example #2
0
        public void Enqueue <T> (ref T item, OnWorkItemComplete <T> onComplete = null)
            where T : IWorkItem
        {
            var queue = GetQueueForType <T>();

            queue.Enqueue(ref item, onComplete);
        }
Example #3
0
        internal InternalWorkItem(WorkQueue <T> queue, ref T data, OnWorkItemComplete <T> onComplete)
        {
            Queue      = queue;
            Data       = data;
            OnComplete = onComplete;
#if DEBUG
            Valid = true;
#endif
        }
Example #4
0
        public void Enqueue(ref T data, OnWorkItemComplete <T> onComplete = null, WorkQueueNotifyMode notifyChanged = WorkQueueNotifyMode.Always)
        {
#if DEBUG
            if (IsMainThreadWorkItem && !IsMainThreadQueue)
            {
                throw new InvalidOperationException("This work item must be queued on the main thread");
            }
#endif

            var wi       = new InternalWorkItem <T>(this, ref data, onComplete);
            var newCount = AddInternal(ref wi);
            NotifyChanged(notifyChanged, newCount, wakeAll: false);
        }
Example #5
0
 internal InternalWorkItem(WorkQueue <T> queue, ref T data, OnWorkItemComplete <T> onComplete)
 {
     Queue      = queue;
     Data       = data;
     OnComplete = onComplete;
 }
Example #6
0
 public void Enqueue(ref T data, OnWorkItemComplete <T> onComplete, bool notifyChanged)
 {
     Enqueue(ref data, onComplete, notifyChanged ? WorkQueueNotifyMode.Always : WorkQueueNotifyMode.Never);
 }