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

◆ TryAddWithNoTimeValidation()

bool System.Collections.Concurrent.BlockingCollection< T >.TryAddWithNoTimeValidation ( T item,
int millisecondsTimeout,
CancellationToken cancellationToken )
inlineprivate

Definition at line 180 of file BlockingCollection.cs.

181 {
183 cancellationToken.ThrowIfCancellationRequested();
185 {
187 }
188 bool flag = true;
189 if (_freeNodes != null)
190 {
192 try
193 {
194 flag = _freeNodes.Wait(0, default(CancellationToken));
195 if (!flag && millisecondsTimeout != 0)
196 {
199 }
200 }
201 catch (OperationCanceledException)
202 {
203 cancellationToken.ThrowIfCancellationRequested();
205 }
206 finally
207 {
208 cancellationTokenSource?.Dispose();
209 }
210 }
211 if (flag)
212 {
213 SpinWait spinWait = default(SpinWait);
214 while (true)
215 {
217 if (((uint)currentAdders & 0x80000000u) != 0)
218 {
219 spinWait.Reset();
220 while (_currentAdders != int.MinValue)
221 {
222 spinWait.SpinOnce();
223 }
225 }
227 {
228 break;
229 }
230 spinWait.SpinOnce(-1);
231 }
232 try
233 {
234 bool flag2 = false;
235 try
236 {
237 cancellationToken.ThrowIfCancellationRequested();
238 flag2 = _collection.TryAdd(item);
239 }
240 catch
241 {
242 if (_freeNodes != null)
243 {
245 }
246 throw;
247 }
248 if (!flag2)
249 {
251 }
253 }
254 finally
255 {
257 }
258 }
259 return flag;
260 }
static string BlockingCollection_Add_Failed
Definition SR.cs:16
static string BlockingCollection_Add_ConcurrentCompleteAdd
Definition SR.cs:14
static string BlockingCollection_Completed
Definition SR.cs:24
Definition SR.cs:7
static CancellationTokenSource CreateLinkedTokenSource(CancellationToken token1, CancellationToken token2)
static int CompareExchange(ref int location1, int value, int comparand)
static int Decrement(ref int location)

References System.Collections.Concurrent.BlockingCollection< T >._collection, System.Collections.Concurrent.BlockingCollection< T >._currentAdders, System.Collections.Concurrent.BlockingCollection< T >._freeNodes, System.Collections.Concurrent.BlockingCollection< T >._occupiedNodes, System.Collections.Concurrent.BlockingCollection< T >._producersCancellationTokenSource, System.SR.BlockingCollection_Add_ConcurrentCompleteAdd, System.SR.BlockingCollection_Add_Failed, System.SR.BlockingCollection_Completed, System.cancellationToken, System.Collections.Concurrent.BlockingCollection< T >.CheckDisposed(), System.Threading.Interlocked.CompareExchange(), System.Threading.CancellationTokenSource.CreateLinkedTokenSource(), System.Threading.Interlocked.Decrement(), System.Collections.Concurrent.BlockingCollection< T >.IsAddingCompleted, System.item, System.millisecondsTimeout, System.Threading.SemaphoreSlim.Release(), System.Threading.CancellationTokenSource.Token, and System.Threading.SemaphoreSlim.Wait().

Referenced by System.Collections.Concurrent.BlockingCollection< T >.Add(), System.Collections.Concurrent.BlockingCollection< T >.Add(), System.Collections.Concurrent.BlockingCollection< T >.TryAdd(), System.Collections.Concurrent.BlockingCollection< T >.TryAdd(), System.Collections.Concurrent.BlockingCollection< T >.TryAdd(), and System.Collections.Concurrent.BlockingCollection< T >.TryAdd().