private void CleanUp() { if (null != workStealingQueue) { if (null != workQueue) { bool done = false; while (!done) { IThreadPoolWorkItem cb = null; if (workStealingQueue.LocalPop(out cb)) { Debug.Assert(null != cb); workQueue.Enqueue(cb, true); } else { done = true; } } } ThreadPoolWorkQueue.allThreadQueues.Remove(workStealingQueue); } }
private void CleanUp() { if (null != workStealingQueue) { if (null != workQueue) { bool done = false; while (!done) { // Ensure that we won't be aborted between LocalPop and Enqueue. try { } finally { IThreadPoolWorkItem cb = null; if (workStealingQueue.LocalPop(out cb)) { Contract.Assert(null != cb); workQueue.Enqueue(cb, true); } else { done = true; } } } } ThreadPoolWorkQueue.allThreadQueues.Remove(workStealingQueue); } }
private void CleanUp() { if (null != workStealingQueue) { if (null != workQueue) { IThreadPoolWorkItem cb; while ((cb = workStealingQueue.LocalPop()) != null) { Debug.Assert(null != cb); workQueue.Enqueue(cb, forceGlobal: true); } } ThreadPoolWorkQueue.WorkStealingQueueList.Remove(workStealingQueue); } }