public void Enqueue(ref T data, OnWorkItemComplete <T> onComplete = null) { lock (Queue) { ManageDrain(); Queue.Enqueue(new InternalWorkItem <T>(this, ref data, onComplete)); } }
public void Enqueue <T> (ref T item, OnWorkItemComplete <T> onComplete = null) where T : IWorkItem { var queue = GetQueueForType <T>(); queue.Enqueue(ref item, onComplete); }
internal InternalWorkItem(WorkQueue <T> queue, ref T data, OnWorkItemComplete <T> onComplete) { Queue = queue; Data = data; OnComplete = onComplete; #if DEBUG Valid = true; #endif }
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); }
internal InternalWorkItem(WorkQueue <T> queue, ref T data, OnWorkItemComplete <T> onComplete) { Queue = queue; Data = data; OnComplete = onComplete; }
public void Enqueue(ref T data, OnWorkItemComplete <T> onComplete, bool notifyChanged) { Enqueue(ref data, onComplete, notifyChanged ? WorkQueueNotifyMode.Always : WorkQueueNotifyMode.Never); }