我有一些包含Action (System.Action)的ConcurrentQueue。这个队列中的每个操作都需要运行(需要使用invoke调用)。
当队列不为空时,这个操作需要被调用。但是我想对同时运行的任务数量设置一些限制。此外,可以随时向队列中添加新的操作。
如何实现?(使用.net 4.0)
我写了一些代码,但我不确定这是否是最佳方法。
当队列不为空时,这个操作需要被调用。但是我想对同时运行的任务数量设置一些限制。此外,可以随时向队列中添加新的操作。
如何实现?(使用.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() );
}
}