Я только начал учиться SemaphoreSlim
, но как семафор.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();