여기에 제가 가지고있는 코드가 있지만 무엇을하는지 이해가되지 않습니다 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
}
}
무엇 await를 수행 ss.WaitAsync();
하고 ss.Release();
있습니까?
한 번에 50 개의 스레드를 실행하고 다음과 같은 코드를 작성하면 한 번에 SemaphoreSlim ss = new SemaphoreSlim(10);
10 개의 활성 스레드를 실행해야합니다.
10 개의 스레드 중 하나가 완료되면 다른 스레드가 시작됩니다. 내가 옳지 않다면 샘플 상황을 이해하도록 도와주세요.
왜 await
함께 필요 ss.WaitAsync();
합니까? 무엇을 ss.WaitAsync();
합니까?