У меня есть windows сервисный код в C#. NET, и он выглядит так, как показано ниже. Я пытаюсь записать PDF в параллель. Foreach в массиве больших файлов 10000 или 50000 файлов. MaxDegreeOfParallelism установлен в 10, так что файлы могут быть созданы одновременно или параллельно более быстрым способом.
Но я получаю ошибку в строке File.WriteAllBytes , говоря Процесс не может получить доступ к файлу Hello.pdf, поскольку он используется другим процессом.
Данные внутри массива файлов уникальны. Имена файлов уникальны во всем наборе массивов.
Я чувствую, что Parallel.Foreach создает несколько потоков, но не атомы c для данных массива файлов.
Пожалуйста, предложите, как решить эту проблему, или дайте мне знать, как лучше использовать Parallel.Foreach.
ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = 10
Parallel.ForEach(files, po, newpath =>
{
try
{
byte[] bytes = File.ReadAllBytes(newpath);
File.WriteAllBytes(newpath.ToString().Replace(sourcePath, destinationPath), bytes);
Array.Clear(bytes, 0, bytes.Length);
Interlocked.Increment(ref count);
}
catch (Exception ex)
{
TraceLog.WriteTrace("Failed copy this file: " + newpath.ToString() + " " + ex.Message + ex.StackTrace);
}
}