Precisa entender o uso de SemaphoreSlim
Aqui está o código que tenho mas não entendo o que o 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 esperass.WaitAsync(); & ss.Release();
Faz?
Eu acho que se eu executar 50 threads de cada vez, então escreva código comoSemaphoreSlim ss = new SemaphoreSlim(10);
então será forçado a executar 10 threads ativos no momento.
Quando um dos 10 threads terminar, outro thread será iniciado ... se não estiver certo, ajude-me a entender com a situação da amostra.
Por que aguarda a necessidade de usar junto comss.WaitAsync();
? O quess.WaitAsync();
Faz?