Ini kode yang saya miliki tetapi saya tidak mengerti apa SemaphoreSlim
yang saya lakukan.
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
}
}
Apa yang menunggu ss.WaitAsync();
dan ss.Release();
dilakukan?
Saya kira jika saya menjalankan 50 utas sekaligus kemudian menulis kode seperti SemaphoreSlim ss = new SemaphoreSlim(10);
itu maka itu akan dipaksa untuk menjalankan 10 utas aktif sekaligus.
Ketika salah satu dari 10 utas selesai, utas lainnya akan dimulai. Jika saya tidak benar, bantu saya untuk memahami dengan situasi sampel.
Mengapa await
dibutuhkan bersama ss.WaitAsync();
? Apa yang ss.WaitAsync();
dilakukannya?