Как ограничить количество активных задач, выполняемых через библиотеку параллельных задач?

У меня есть некоторые 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() );
        }
    }

Ответы на вопрос(2)

Ваш ответ на вопрос