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

◆ TryPeek()

bool System.Collections.Concurrent.ConcurrentQueueSegment< T >.TryPeek ( [MaybeNullWhen(false)] out T result,
bool resultUsed )
inline

Definition at line 98 of file ConcurrentQueueSegment.cs.

99 {
100 if (resultUsed)
101 {
104 }
105 Slot[] slots = _slots;
106 SpinWait spinWait = default(SpinWait);
107 while (true)
108 {
109 int num = Volatile.Read(ref _headAndTail.Head);
110 int num2 = num & _slotsMask;
111 int num3 = Volatile.Read(ref slots[num2].SequenceNumber);
112 int num4 = num3 - (num + 1);
113 if (num4 == 0)
114 {
115 result = (resultUsed ? slots[num2].Item : default(T));
116 return true;
117 }
118 if (num4 < 0)
119 {
120 bool frozenForEnqueues = _frozenForEnqueues;
121 int num5 = Volatile.Read(ref _headAndTail.Tail);
122 if (num5 - num <= 0 || (frozenForEnqueues && num5 - FreezeOffset - num <= 0))
123 {
124 break;
125 }
126 spinWait.SpinOnce(-1);
127 }
128 }
129 result = default(T);
130 return false;
131 }
static bool Read(ref bool location)
Definition Volatile.cs:67

References System.Collections.Concurrent.ConcurrentQueueSegment< T >._frozenForEnqueues, System.Collections.Concurrent.ConcurrentQueueSegment< T >._headAndTail, System.Collections.Concurrent.ConcurrentQueueSegment< T >._preservedForObservation, System.Collections.Concurrent.ConcurrentQueueSegment< T >._slots, System.Collections.Concurrent.ConcurrentQueueSegment< T >._slotsMask, System.Collections.Concurrent.ConcurrentQueueSegment< T >.FreezeOffset, System.Collections.Concurrent.PaddedHeadAndTail.Head, System.Collections.Concurrent.ConcurrentQueueSegment< T >.Slot.Item, System.Threading.Interlocked.MemoryBarrier(), System.Threading.Volatile.Read(), System.Threading.SpinWait.SpinOnce(), and System.Collections.Concurrent.PaddedHeadAndTail.Tail.