8[DebuggerDisplay(
"Current Count = {m_currentCount}")]
95 : this(initialCount, int.MaxValue)
101 if (initialCount < 0 || initialCount > maxCount)
114 [UnsupportedOSPlatform(
"browser")]
120 [UnsupportedOSPlatform(
"browser")]
126 [UnsupportedOSPlatform(
"browser")]
129 long num = (long)
timeout.TotalMilliseconds;
130 if (num < -1 || num >
int.MaxValue)
137 [UnsupportedOSPlatform(
"browser")]
140 long num = (long)
timeout.TotalMilliseconds;
141 if (num < -1 || num >
int.MaxValue)
148 [UnsupportedOSPlatform(
"browser")]
154 [UnsupportedOSPlatform(
"browser")]
174 bool lockTaken =
false;
180 int num = SpinWait.SpinCountforSpinBeforeWait * 4;
182 while (spinWait.
Count < num)
237 cancellationTokenRegistration.
Dispose();
239 return task?.GetAwaiter().GetResult() ?? flag;
242 [UnsupportedOSPlatform(
"browser")]
292 long num = (long)
timeout.TotalMilliseconds;
293 if (num < -1 || num >
int.MaxValue)
320 return Task.FromResult(result:
true);
324 return Task.FromResult(result:
false);
341 m_asyncTail.Next = taskNode;
351 if (
task.Next !=
null)
355 if (
task.Prev !=
null)
367 task.Next = (task.Prev =
null);
390 return await asyncWaiter.
ConfigureAwait(continueOnCapturedContext:
false);
401 if (releaseCount < 1)
414 currentCount += releaseCount;
419 if (num2 > releaseCount)
424 for (
int i = 0; i < num2; i++)
431 int num3 = currentCount - waitCount;
442 if (
m_waitHandle !=
null && num == 0 && currentCount > 0)
456 protected virtual void Dispose(
bool disposing)
461 if (waitHandle !=
null)
466 m_lockObjAndDisposed.Value =
true;
static void SuppressFinalize(object obj)
static byte Min(byte val1, byte val2)
static string SemaphoreSlim_Disposed
static string SemaphoreSlim_ctor_MaxCountWrong
static string SemaphoreSlim_ctor_InitialCountWrong
static string SemaphoreSlim_Wait_TimeoutWrong
static string SemaphoreSlim_Release_CountWrong
static void Exit(object obj)
static void PulseAll(object obj)
static bool Wait(object obj, int millisecondsTimeout)
static void Enter(object obj)
static void Pulse(object obj)
WaitHandle AvailableWaitHandle
SemaphoreSlim(int initialCount)
Task< bool > WaitAsync(TimeSpan timeout)
static void CancellationTokenCanceledEventHandler(object obj)
void Wait(CancellationToken cancellationToken)
bool RemoveAsyncWaiter(TaskNode task)
Task< bool > WaitAsync(TimeSpan timeout, CancellationToken cancellationToken)
async Task< bool > WaitUntilCountOrTimeoutAsync(TaskNode asyncWaiter, int millisecondsTimeout, CancellationToken cancellationToken)
int Release(int releaseCount)
bool Wait(int millisecondsTimeout)
bool Wait(int millisecondsTimeout, CancellationToken cancellationToken)
bool WaitUntilCountOrTimeout(int millisecondsTimeout, uint startTime, CancellationToken cancellationToken)
volatile int m_currentCount
Task< bool > WaitAsync(int millisecondsTimeout, CancellationToken cancellationToken)
bool Wait(TimeSpan timeout, CancellationToken cancellationToken)
static readonly Action< object > s_cancellationTokenCanceledEventHandler
readonly StrongBox< bool > m_lockObjAndDisposed
int m_countOfWaitersPulsedToWake
Task WaitAsync(CancellationToken cancellationToken)
bool Wait(TimeSpan timeout)
Task< bool > WaitAsync(int millisecondsTimeout)
volatile ManualResetEvent m_waitHandle
TaskNode CreateAndAddAsyncWaiter()
virtual void Dispose(bool disposing)
SemaphoreSlim(int initialCount, int maxCount)
static TaskScheduler Default
bool TrySetResult(TResult result)
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
new Task< TResult > WaitAsync(CancellationToken cancellationToken)
static Task FromCanceled(CancellationToken cancellationToken)
static int UpdateTimeOut(uint startTime, int originalWaitMillisecondsTimeout)
virtual void Dispose(bool explicitDisposing)
@ RunContinuationsAsynchronously
static CancellationToken None
static TimeSpan FromMilliseconds(double value)