Hier ist der Code, den ich habe, aber ich verstehe nicht, was er SemaphoreSlim
tut.
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
}
}
Was erwartet ss.WaitAsync();
und ss.Release();
tut?
Ich denke, wenn ich 50 Threads gleichzeitig laufen lasse und dann Code schreibe SemaphoreSlim ss = new SemaphoreSlim(10);
, wird er gezwungen sein, 10 aktive Threads gleichzeitig auszuführen.
Wenn einer von 10 Threads abgeschlossen ist, wird ein anderer Thread gestartet. Wenn ich nicht richtig liege, helfen Sie mir, die Beispielsituation zu verstehen.
Warum wird await
zusammen mit benötigt ss.WaitAsync();
? Was macht ss.WaitAsync();
das