Parallel.Foreach переопределяет работу System.IO.File и вызывает ошибку - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть 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);
            }
        }
...