Ecco il codice che ho ma non capisco cosa SemaphoreSlim
stia facendo.
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
}
}
Cosa attende ss.WaitAsync();
e ss.Release();
fa?
Immagino che se eseguo 50 thread alla volta, scrivo codice in SemaphoreSlim ss = new SemaphoreSlim(10);
questo modo sarà costretto a eseguire 10 thread attivi alla volta.
Quando uno dei 10 thread viene completato, verrà avviato un altro thread. Se non ho ragione, aiutami a capire con una situazione di esempio.
Perché è await
necessario insieme a ss.WaitAsync();
? Cosa fa ss.WaitAsync();
?