Aquí está el código que tengo pero no entiendo qué SemaphoreSlim
está haciendo.
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
}
}
¿Qué espera ss.WaitAsync();
y ss.Release();
qué hace?
Supongo que si ejecuto 50 subprocesos a la vez, luego escribo código como, SemaphoreSlim ss = new SemaphoreSlim(10);
entonces se verá obligado a ejecutar 10 subprocesos activos a la vez.
Cuando se completa uno de los 10 subprocesos, comenzará otro subproceso. Si no estoy en lo cierto, ayúdame a comprender la situación de la muestra.
¿Por qué se await
necesita junto con ss.WaitAsync();
? ¿Qué hace ss.WaitAsync();
?