Aqui está o código que tenho, mas não entendo o que SemaphoreSlim
está fazendo.
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
}
}
O que espera ss.WaitAsync();
e ss.Release();
faz?
Eu acho que se eu executar 50 threads de uma vez, então escrevo o código, SemaphoreSlim ss = new SemaphoreSlim(10);
então ele será forçado a executar 10 threads ativas por vez.
Quando um dos 10 tópicos for concluído, outro será iniciado. Se eu não estiver certo, então me ajude a entender com uma situação de amostra.
Por que é await
necessário junto com ss.WaitAsync();
? O que ss.WaitAsync();
fazer?