Как ограничить количество активных задач, выполняемых через библиотеку параллельных задач?
У меня есть некоторые ConcurrentQueue, которые содержат действие (System.Action). Каждое действие в этой очереди должно выполняться (должно вызываться с помощью invoke).
Когда очередь не пуста => действие должно быть вызвано => Но я хочу ограничить количество параллельных задач, которые будут выполняться. Кроме того, новое действие может быть добавлено в очередь в любое время.
Как это сделать ?
(используя .net 4.0)
Я написал что-то, но я не уверен, что это лучший подход
SemaphoreSlim maxThread = new SemaphoreSlim(5);
while( !actionQueue.IsEmpty )
{
maxThread.Wait();
Task.Factory.StartNew( () =>
{
Action action;
if( actionExecution.TryDequeue( out action) )
{
action.Invoke();
}
},
TaskCreationOptions.LongRunning ).ContinueWith( ( task ) => maxThread.Release() );
}
}