Musisz zrozumieć użycie SemaphoreSlim
Oto kod, który mam, ale nie rozumiem, co robi SemaphoreSlim.
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
}
}
Co czekass.WaitAsync(); & ss.Release();
robić?
Myślę, że jeśli uruchomię 50 wątków naraz, napisz kod jakSemaphoreSlim ss = new SemaphoreSlim(10);
następnie będzie zmuszony do uruchomienia 10 aktywnych wątków na czas.
Gdy jeden z 10 wątków zakończy się, rozpocznie się inny wątek .... jeśli nie mam racji, pomóż mi zrozumieć przykładową sytuację.
Po co czekać z potrzebnym użyciemss.WaitAsync();
? Co robiss.WaitAsync();
robić?