如果我將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