我有一些 ConcurrentQueue 包含 Action ( 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() );
}
}