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

◆ TryWaitForElement()

bool System.Linq.Parallel.OrderPreservingPipeliningMergeHelper< TOutput, TKey >.OrderedPipeliningMergeEnumerator.TryWaitForElement ( int producer,
ref Pair< TKey, TOutput > element )
inlineprivate

Definition at line 121 of file OrderPreservingPipeliningMergeHelper.cs.

122 {
124 object obj = _mergeHelper._bufferLocks[producer];
125 lock (obj)
126 {
127 if (queue.Count == 0)
128 {
129 if (_mergeHelper._producerDone[producer])
130 {
131 element = default(Pair<TKey, TOutput>);
132 return false;
133 }
134 _mergeHelper._consumerWaiting[producer] = true;
136 if (queue.Count == 0)
137 {
138 element = default(Pair<TKey, TOutput>);
139 return false;
140 }
141 }
142 if (_mergeHelper._producerWaiting[producer])
143 {
145 _mergeHelper._producerWaiting[producer] = false;
146 }
147 if (queue.Count < 1024)
148 {
149 element = queue.Dequeue();
150 return true;
151 }
153 _mergeHelper._buffers[producer] = new Queue<Pair<TKey, TOutput>>(128);
154 }
155 bool flag = TryGetPrivateElement(producer, ref element);
156 return true;
157 }
static bool Wait(object obj, int millisecondsTimeout)
Definition Monitor.cs:87
static void Pulse(object obj)
Definition Monitor.cs:103

References System.Linq.Parallel.OrderPreservingPipeliningMergeHelper< TOutput, TKey >.OrderedPipeliningMergeEnumerator._mergeHelper, System.Linq.Parallel.OrderPreservingPipeliningMergeHelper< TOutput, TKey >.OrderedPipeliningMergeEnumerator._privateBuffer, System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.obj, System.Threading.Monitor.Pulse(), System.Linq.Parallel.OrderPreservingPipeliningMergeHelper< TOutput, TKey >.OrderedPipeliningMergeEnumerator.TryGetPrivateElement(), and System.Threading.Monitor.Wait().

Referenced by System.Linq.Parallel.OrderPreservingPipeliningMergeHelper< TOutput, TKey >.OrderedPipeliningMergeEnumerator.MoveNext().