นี่คือรหัสที่ฉันมี แต่ฉันไม่เข้าใจว่า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
}
}
รอss.WaitAsync();
และss.Release();
ทำอะไร
ฉันเดาว่าถ้าฉันเรียกใช้ 50 เธรดในแต่ละครั้งให้เขียนโค้ดเช่นSemaphoreSlim ss = new SemaphoreSlim(10);
นั้นมันจะถูกบังคับให้เรียกใช้เธรดที่ใช้งาน 10 เธรดในเวลานั้น
เมื่อหนึ่งใน 10 เธรดเสร็จสมบูรณ์เธรดอื่นจะเริ่มขึ้น ถ้าฉันไม่ถูกต้องช่วยฉันทำความเข้าใจกับสถานการณ์ตัวอย่าง
ทำไมจึงawait
จำเป็นต้องมีss.WaitAsync();
? อะไรss.WaitAsync();
ทำอย่างไร