maxConcurrencyを10に設定すると、以下のコードでmaxパラレルタスクが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
[一度に1つのXしか実行しないタスクのセットを持つ](https://stackoverflow.com/questions/14075029/have-a-set-of-tasks-with-only-x-running-at)の可能な複製-a-time) – Cheesebaron