İşte sahip olduğum kod ama ne SemaphoreSlim
yaptığını anlamıyorum .
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
}
}
Ne bekliyor ss.WaitAsync();
ve ss.Release();
ne yapıyor?
Bir seferde 50 iş parçacığı çalıştırırsam, o zamanki gibi kod SemaphoreSlim ss = new SemaphoreSlim(10);
yazarsam, aynı anda 10 aktif iş parçacığı çalıştırmak zorunda kalacak.
10 iş parçacığından biri tamamlandığında, başka bir iş parçacığı başlayacaktır. Eğer haklı değilsem, örnek durumu anlamama yardım et.
Neden await
birlikte gerekli ss.WaitAsync();
? Ne yapar ss.WaitAsync();
?