这里是我目前的代码,但我不理解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
}
}
< p > < code > await ss.WaitAsync(); 和 < code > ss.Release(); 是什么?
< p > 如果我同时运行50个线程,然后编写代码如< code > SemaphoreSlim ss = new SemaphoreSlim(10); ,那么它将强制在任何时候只执行10个活动线程。
< p > 当10个线程中的一个完成时,另一个线程将开始。如果我不正确,请帮助我用示例情况理解。
< p > 为什么需要连同 < code >ss.WaitAsync(); 使用 await
? ss.WaitAsync();
是做什么的?