Voici le code que j'ai mais je ne comprends pas ce que je SemaphoreSlim
fais.
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'est-ce qui attend ss.WaitAsync();
et que ss.Release();
fait?
Je suppose que si j'exécute 50 threads à la fois, j'écris du code comme SemaphoreSlim ss = new SemaphoreSlim(10);
il sera alors obligé d'exécuter 10 threads actifs à la fois.
Lorsque l'un des 10 threads se termine, un autre thread démarre. Si je n'ai pas raison, aidez-moi à comprendre avec un exemple de situation.
Pourquoi est-il await
nécessaire avec ss.WaitAsync();
? Que fait ss.WaitAsync();
-on?