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

◆ TryDequeueIfSlow()

bool System.Threading.Tasks.SingleProducerSingleConsumerQueue< T >.TryDequeueIfSlow ( Predicate< T > predicate,
ref Segment segment,
ref T[] array,
[MaybeNullWhen(false)] out T result )
inlineprivate

Definition at line 259 of file SingleProducerSingleConsumerQueue.cs.

260 {
261 if (segment._state._last != segment._state._lastCopy)
262 {
263 segment._state._lastCopy = segment._state._last;
264 return TryDequeueIf(predicate, out result);
265 }
266 if (segment._next != null && segment._state._first == segment._state._last)
267 {
268 segment = segment._next;
269 array = segment._array;
270 _head = segment;
271 }
272 int first = segment._state._first;
273 if (first == segment._state._last)
274 {
275 result = default(T);
276 return false;
277 }
278 result = array[first];
279 if (predicate == null || predicate(result))
280 {
281 array[first] = default(T);
282 segment._state._first = (first + 1) & (segment._array.Length - 1);
283 segment._state._lastCopy = segment._state._last;
284 return true;
285 }
286 result = default(T);
287 return false;
288 }
bool TryDequeueIf(Predicate< T > predicate, [MaybeNullWhen(false)] out T result)

References System.Threading.Tasks.SingleProducerSingleConsumerQueue< T >._head, System.array, and System.Threading.Tasks.SingleProducerSingleConsumerQueue< T >.TryDequeueIf().

Referenced by System.Threading.Tasks.SingleProducerSingleConsumerQueue< T >.TryDequeueIf().