多くの場合があるアプリケーションがあります。それぞれのケースには、多くのマルチページtifファイルがあります。tfファイルをpdfファイルに変換する必要があります。ファイルがたくさんあるので、変換プロセスをスレッド化できると思いました。現在、プロセスを一度に10回の変換(つまり、10回のトレッド)に制限しています。1つの変換が完了すると、別の変換が開始されます。
これは私が使用している現在の設定です。
private void ConvertFiles()
{
List<AutoResetEvent> semaphores = new List<AutoResetEvet>();
foreach(String fileName in filesToConvert)
{
String file = fileName;
if(semaphores.Count >= 10)
{
WaitHandle.WaitAny(semaphores.ToArray());
}
AutoResetEvent semaphore = new AutoResetEvent(false);
semaphores.Add(semaphore);
ThreadPool.QueueUserWorkItem(
delegate
{
Convert(file);
semaphore.Set();
semaphores.Remove(semaphore);
}, null);
}
if(semaphores.Count > 0)
{
WaitHandle.WaitAll(semaphores.ToArray());
}
}
これを使用すると、WaitHandle.WaitAll()またはWaitHandle.WaitAny()配列パラメーターが65の長さを超えてはならないという例外が発生することがあります。このアプローチで何が間違っているのでしょうか。