Вот код, который у меня есть, но я не понимаю, что делает СемафорСлим.
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();
do?
Я предполагаю, что если я запускаю 50 потоков за раз, тогда пишу код типа SemaphoreSlim ss = new SemaphoreSlim(10);
, тогда он будет вынужден запускать 10 активных потоков во время.
Когда один из 10 потоков завершится, начнется другой поток... если я не прав, помогите мне разобраться с ситуацией с образцом.
Почему нужно использовать вместе с ss.WaitAsync();
? Что делает ss.WaitAsync();
?