Необходимо понимать, как использовать SemaphoreSlim

Вот код, который у меня есть, но я не понимаю, что делает SemaphoreSlim.

async Task WorkerMainAsync()
{
  SemaphoreSlim ss = new SemaphoreSlim(10);
  List<Task> trackedTasks = new List<Task>();
  while (DoMore())
  {
    await ss.WaitAsync();
    trackedTasks.Add(Task.Run(() =>
              {
                DoPollingThenWorkAsync();
                ss.Release();
              }));
  }
  await Task.WhenAll(trackedTasks);
}

void DoPollingThenWorkAsync()
{
  var msg = Poll();
  if (msg != null)
  {
    Thread.Sleep(2000); // process the long running CPU-bound job
  }
}

Что ждетss.WaitAsync(); & ss.Release(); делать?

Я предполагаю, что если я запускаю 50 потоков одновременно, напишите кодSemaphoreSlim ss = new SemaphoreSlim(10); тогда он будет вынужден запускать 10 активных потоков одновременно.

Когда один из 10 потоков завершится, начнется другой поток .... если я не прав, помогите разобраться с примером ситуации.

Почему нужно использовать await вместе сss.WaitAsync();? Что значитss.WaitAsync(); делать?

Ответы на вопрос(2)

Ваш ответ на вопрос