C# Directory.CreateDirectory是否可以从一个线程而不是其他线程访问文件夹?

C# Directory.CreateDirectory是否可以从一个线程而不是其他线程访问文件夹?,c#,multithreading,directory,C#,Multithreading,Directory,我们有一个完整的路径列表,我们想把一些文件复制到其中,有点像这样 C:\temp\sub1\file1A C:\temp\sub1\file1B C:\temp\sub2\file2A C:\temp\sub3\file3A C:\temp\sub3\file3B C:\temp\sub3\file3C etc.... 有一些代码可以做到这一点 for each file in the file list if (!Directory.Exists(dirName)

我们有一个完整的路径列表,我们想把一些文件复制到其中,有点像这样

 C:\temp\sub1\file1A
 C:\temp\sub1\file1B
 C:\temp\sub2\file2A
 C:\temp\sub3\file3A
 C:\temp\sub3\file3B
 C:\temp\sub3\file3C
 etc....
有一些代码可以做到这一点

for each file in the file list
    if (!Directory.Exists(dirName)
    {
        Directory.CreateDirectory(dirName)
    }
我们可以从日志中看到,所有子文件夹都已创建,每个子文件夹只进行了一次尝试-因此,在每个子文件夹中的第一个文件通过上述循环后,Directory.Exists返回true

然后,代码执行如下操作

var fileDownloadActions = new List<Action>();

// populated the list with  GetFile(requiredInfo)

Parallel.Invoke(new ParallelOptions {MaxDegreeOfParallelism = 10},
                fileDownloadActions.ToArray());
var fileDownloadActions=newlist();
//用GetFile(requiredInfo)填充列表
调用(新的ParallelOptions{MaxDegreeOfParallelism=10},
fileDownloadActions.ToArray());
现在有一个奇怪的地方——大多数情况下,它工作得很好,但有时会失败,出现多个DirectoryNotFoundExceptions——声称它找不到刚刚创建的目录

有时它找不到任何已创建的子文件夹,有时它对某些子文件夹有效,但对其他子文件夹无效

当前的工作原理是,尽管创建文件夹的线程认为它们已创建(并且对Directory.Exists的检查返回true,因为无论文件夹中有多少文件,我们只尝试创建每个文件夹一次)它们实际上还没有在操作系统上完全正确地创建,当我们试图从其他线程访问它们时,它会爆炸

以前见过/听说过类似的事情吗


我们的工作原理正确吗?如果正确的话,最好的解决方法是什么?(我不想只是睡着了!)

这可以用访问修改后的闭包来解释吗

我想这取决于循环的外观,但从我当时看到的情况来看,如果存储委托以供稍后执行,则可能无法获得预期的dirName值


请查看捕获变量部分下的内容。

我恐怕没有-这里没有修改过的闭包。我可以从日志中看到,我们得到的所有错误都是针对我们希望从文件列表中看到的不同文件名。