C# Parallel.Foreach正在重写System.IO.File操作&;引起错误

C# Parallel.Foreach正在重写System.IO.File操作&;引起错误,c#,asp.net,windows-services,C#,Asp.net,Windows Services,我在C#.NET中有一个windows服务代码,下面是这个代码。我正在尝试在包含10000或50000个文件的大文件数组中编写parallel.foreach中的pdf。MaxDegreeOfParallelism设置为10,以便以更快的方式并发或并行创建文件 但是我在File.writealBytes行上收到了错误,它说进程无法访问文件“Hello.pdf”,因为它正被另一个进程使用。 文件数组中的数据是唯一的。文件名在整个数组集中是唯一的 我觉得很平行。Foreach正在创建多个线程,但它在

我在C#.NET中有一个windows服务代码,下面是这个代码。我正在尝试在包含10000或50000个文件的大文件数组中编写parallel.foreach中的pdf。MaxDegreeOfParallelism设置为10,以便以更快的方式并发或并行创建文件

但是我在File.writealBytes行上收到了错误,它说进程无法访问文件“Hello.pdf”,因为它正被另一个进程使用。

文件数组中的数据是唯一的。文件名在整个数组集中是唯一的

我觉得很平行。Foreach正在创建多个线程,但它在文件数组数据上不是原子的

请建议如何解决这个问题,或者让我知道如何更好地使用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);
            }
        }

它是随机的,有时只会导致问题
文件的内容是什么?它是否包含重复的
文件路径
?文件数组中没有重复项。我也检查过了。你能用一些示例值来丰富你的代码吗。G对于
newpath
destinationPath
?您是否总是使用
file.ReadAllBytes()
读取同一个文件?实际上并不相关,但为什么要调用
Array.Clear(bytes,0,bytes.Length)?这是毫无意义的。也
联锁。增量(参考计数)-那是干什么用的?