8

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() );
        }
    }
4

2 に答える 2

-1

ParallelOptions を指定する必要があります

ParallelOptions options = new ParallelOptions();
options.MaxDegreeOfParallelism = 4;//value of your choice

if (Parallel.ForEach(PDFFiles, options, element =>
{
   //do work 
}
于 2013-07-16T10:33:46.277 に答える