Đây là mã tôi có nhưng tôi không hiểu những gì SemaphoreSlim
đang làm.
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
}
}
Điều gì đang chờ đợi ss.WaitAsync();
và ss.Release();
làm gì?
Tôi đoán rằng nếu tôi chạy 50 chủ đề một lúc rồi viết mã như thế SemaphoreSlim ss = new SemaphoreSlim(10);
thì nó sẽ bị buộc phải chạy 10 chủ đề hoạt động cùng một lúc.
Khi một trong 10 luồng hoàn thành thì một luồng khác sẽ bắt đầu. Nếu tôi không đúng thì hãy giúp tôi hiểu với tình huống mẫu.
Tại sao await
cần thiết cùng với ss.WaitAsync();
? Làm gì ss.WaitAsync();
?