最佳答案
这是我的代码,但我不明白 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();
做什么?