Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Dequeue()

object System.Threading.ThreadPoolWorkQueue.Dequeue ( ThreadPoolWorkQueueThreadLocals tl,
ref bool missedSteal )
inline

Definition at line 457 of file ThreadPoolWorkQueue.cs.

458 {
459 WorkStealingQueue workStealingQueue = tl.workStealingQueue;
460 object result;
461 if ((result = workStealingQueue.LocalPop()) == null && !workItems.TryDequeue(out result))
462 {
463 WorkStealingQueue[] queues = WorkStealingQueueList.Queues;
464 int num = queues.Length;
465 int num2 = num - 1;
466 uint num3 = tl.random.NextUInt32() % (uint)num;
467 while (num > 0)
468 {
469 num3 = ((num3 < num2) ? (num3 + 1) : 0u);
470 WorkStealingQueue workStealingQueue2 = queues[num3];
471 if (workStealingQueue2 != workStealingQueue && workStealingQueue2.CanSteal)
472 {
473 result = workStealingQueue2.TrySteal(ref missedSteal);
474 if (result != null)
475 {
476 return result;
477 }
478 }
479 num--;
480 }
481 if (ThreadPool.SupportsTimeSensitiveWorkItems)
482 {
484 }
485 }
486 return result;
487 }
bool TryDequeue([MaybeNullWhen(false)] out T result)
readonly ConcurrentQueue< object > workItems
IThreadPoolWorkItem TryDequeueTimeSensitiveWorkItem()

References System.Threading.ThreadPoolWorkQueue.WorkStealingQueue.CanSteal, System.Threading.ThreadPoolWorkQueue.WorkStealingQueue.LocalPop(), System.Threading.ThreadPoolWorkQueue.WorkStealingQueueList.Queues, System.Threading.ThreadPoolWorkQueueThreadLocals.random, System.Threading.ThreadPool.SupportsTimeSensitiveWorkItems, System.Collections.Concurrent.ConcurrentQueue< T >.TryDequeue(), System.Threading.ThreadPoolWorkQueue.TryDequeueTimeSensitiveWorkItem(), System.Threading.ThreadPoolWorkQueue.WorkStealingQueue.TrySteal(), System.Threading.ThreadPoolWorkQueue.workItems, and System.Threading.ThreadPoolWorkQueueThreadLocals.workStealingQueue.

Referenced by System.Threading.ThreadPoolWorkQueue.Dispatch().