如果我将maxConcurrency作为10传递,下面的代码将最大并行任务限制为10?如何验证一次运行的任务数量?在下面的代码上下文中,SemaphoreSlim的用法是否正确?它会限制最大运行线程吗?
public BlockingCollection<Task> _workTaskQueue;
public void DequeueTask(int maxConcurrency)
{
var tasks = new List<Task>();
using (SemaphoreSlim concurrencySemaphore = new SemaphoreSlim(maxConcurrency))
{
foreach (var task in _workTaskQueue.GetConsumingEnumerable())
{
concurrencySemaphore.Wait();
if (!(task.IsCanceled) && task.Status == TaskStatus.Created)
{
task.ContinueWith((t) => { concurrencySemaphore.Release(); });
tasks.Add(task);
task.Start();
}
}
}
Task.WaitAll(tasks.ToArray());
}
参见https://stackoverflow.com/questions/14075029/have-a-set-of-tasks-with-only-x-running-at-a-time –
非常感谢它帮助! – Nitheesh
[有一组任务只能运行一次X](https://stackoverflow.com/questions/14075029/have-a-set-of-tasks-with-only-x-running-at -a-time) – Cheesebaron