我刚开始学习SemaphoreSlim
但是在这个程序中semaphore.CurrentCount是如何增加和减少的呢?据我了解,当调用semaphore.Wait()
时,释放计数器递减1,当semaphore.Release()
时,允许执行两个线程,但semaphore.CurrentCount
如何递增?它是从0还是1开始的?semaphore.CurrentCount在这种情况下如何工作?
var semaphore = new SemaphoreSlim(2, 10);
for (int i = 0; i < 20; i++)
{
Task.Factory.StartNew(() =>
{
Console.WriteLine("Entering task " + Task.CurrentId);
semaphore.Wait(); //releasecount--
Console.WriteLine("Processing task " + Task.CurrentId);
});
}
while (semaphore.CurrentCount <= 2)
{
Console.WriteLine("Semaphore count: " + semaphore.CurrentCount);
Console.ReadKey();
semaphore.Release(2);
}
Console.ReadKey();