Action ( System.Action ) を含む ConcurrentQueue があります。このキュー内の各アクションを実行する必要があります ( 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() );
}
}