Необходимо понимать, как использовать 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();
делать?