在我的WebApiaction方法中,我想使用以下代码创建/覆盖一个文件夹:
string myDir = "...";
if(Directory.Exists(myDir))
{
Directory.Delete(myDir, true);
}
Directory.CreateDirectory(myDir);
// 1 - Check the dir
Debug.WriteLine("Double check if the Dir is created: " + Directory.Exists(myDir));
// Some other stuff here...
// 2 - Check the dir again
Debug.WriteLine("Check again if the Dir still exists: " + Directory.Exists(myDir));
Run Code Online (Sandbox Code Playgroud)
问题
奇怪的是,有时在创建目录后,该目录不存在!
有时第一次检查目录时(数字1的位置); 其他时候Directory.Exist()返回.第二次检查目录时(数字2的位置)也是如此.truefalse
笔记
问题
WebApi或操作系统处理并发?或者一般情况:
更新:
使用DirectoryInfo和Refresh(),而不是 …
这个:
Directory.Delete(dir, true);
Run Code Online (Sandbox Code Playgroud)
不是同步的.
在紧接着的行中,您仍然可以操作/读取目录.
例如,这个:
Directory.Delete(destinationDir, true);
Directory.CreateDirectory(destinationDir);
Thread.Sleep(1000);
Run Code Online (Sandbox Code Playgroud)
导致文件夹不存在.删除运行异步,CreateDirectory不创建,因为它已经存在,然后删除实际触发并删除目录.
是否有一个IO API可以提供一致性?
涉及的答案Thread.Sleep将援引Zalgo.我想要一个真正的解决方案.