pro*_*ngs 4 c# multithreading ioexception race-condition
我正在开发一个多线程应用程序.我的代码中有一处:
File.Delete(sidetapedata);
File.Move(sidetapedata2, sidetapedata); //sidetapedata and sidetapedata2 are two file paths that correspond to sidetapedata.txt and sidetaptdata2.txt in some directory.
Run Code Online (Sandbox Code Playgroud)
第二行有时运行良好,其他时候,它抛出IOException:
Cannot create a file when that file already exists.
Run Code Online (Sandbox Code Playgroud)
还有一个线程正在访问该sidetapedata文件,但该文件只读取此文件,没有写入操作.我正在使用锁来保护竞争条件.不知道为什么会这样.
更新:即使visual c#debugger向我显示此异常,查看包含这些文件的目录,我看到没有sidetapedata.txt文件,但有一个sidetapedata2.txt文件!
UPDATE2:另外,这一行为仅发生在sidetapedata.txt和sidetapedata2.txt都是空白
Jon*_*eet 10
不知道为什么会发生这种事,除非有通过在文件系统中触发一些事件Delete,这意味着它不会调用实际删除直到调用返回后略有下降.一些选择:
File.Copy(sidetapedata, sidetapedata2, true)来复制,而不是移动,然后删除源文件.这样效率会降低,假设移动将由简单的文件系统目录条目更改(而不是真正复制数据)来处理File.Move在目标文件上使用而不是将File.Delete其移动到某个无害的其他文件名,然后删除它,希望它Move比原子文件更原子Delete.我怀疑线程在这里是无关紧要的 - 我建议你写一个简短但完整的程序来验证它,这样你就可以排除它(并轻松测试解决方法).
| 归档时间: |
|
| 查看次数: |
4977 次 |
| 最近记录: |