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

◆ TryTakeFromAnyCoreSlow()

static int System.Collections.Concurrent.BlockingCollection< T >.TryTakeFromAnyCoreSlow ( BlockingCollection< T >[] collections,
out T item,
int millisecondsTimeout,
bool isTakeOperation,
CancellationToken externalCancellationToken )
inlinestaticprivate

Definition at line 562 of file BlockingCollection.cs.

563 {
564 int num = millisecondsTimeout;
565 uint startTime = 0u;
566 if (millisecondsTimeout != -1)
567 {
568 startTime = (uint)Environment.TickCount;
569 }
570 while (millisecondsTimeout == -1 || num >= 0)
571 {
574 if (handles.Count == 0 && isTakeOperation)
575 {
577 }
578 if (handles.Count == 0)
579 {
580 break;
581 }
583 {
584 handles.Add(cancellationTokenSource.Token.WaitHandle);
585 int num2 = WaitHandle.WaitAny(handles.ToArray(), num);
586 if (cancellationTokenSource.IsCancellationRequested)
587 {
588 externalCancellationToken.ThrowIfCancellationRequested();
589 }
590 if (!cancellationTokenSource.IsCancellationRequested)
591 {
592 if (num2 == 258)
593 {
594 break;
595 }
596 if (collections.Length != handles.Count - 1)
597 {
598 for (int i = 0; i < collections.Length; i++)
599 {
601 {
602 num2 = i;
603 break;
604 }
605 }
606 }
608 {
609 return num2;
610 }
611 }
612 }
613 if (millisecondsTimeout != -1)
614 {
616 }
617 }
618 item = default(T);
619 return -1;
620 }
bool TryTake([MaybeNullWhen(false)] out T item)
static int UpdateTimeOut(uint startTime, int originalWaitMillisecondsTimeout)
static List< WaitHandle > GetHandles(BlockingCollection< T >[] collections, CancellationToken externalCancellationToken, bool isAddOperation, out CancellationToken[] cancellationTokens)
void Add(TKey key, TValue value)
static string BlockingCollection_CantTakeAnyWhenAllDone
Definition SR.cs:20
Definition SR.cs:7
static CancellationTokenSource CreateLinkedTokenSource(CancellationToken token1, CancellationToken token2)
static int WaitAny(WaitHandle[] waitHandles, int millisecondsTimeout)

References System.Collections.Concurrent.BlockingCollection< T >._occupiedNodes, System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Threading.SemaphoreSlim.AvailableWaitHandle, System.SR.BlockingCollection_CantTakeAnyWhenAllDone, System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Threading.CancellationTokenSource.CreateLinkedTokenSource(), System.Collections.Concurrent.BlockingCollection< T >.GetHandles(), System.item, System.millisecondsTimeout, System.Environment.TickCount, System.Collections.Concurrent.BlockingCollection< T >.TryTake(), System.Collections.Concurrent.BlockingCollection< T >.UpdateTimeOut(), and System.Threading.WaitHandle.WaitAny().

Referenced by System.Collections.Concurrent.BlockingCollection< T >.TryTakeFromAnyCore().