我有一段简单的代码,如下所示:
File.WriteAllBytes(Path.Combine(temp, node.Name), stuffFile.Read(0, node.FileHeader.FileSize));
有人会认为这WriteAllBytes
将是一个阻塞调用,因为它在 C# 5.0 中具有 Async 对应项,并且它在任何 MSDN 文档中都没有说明它是非阻塞的。但是,当文件大小合理(不是很大,但在 20mb 范围内)时,之后打开文件的调用似乎在写入完成之前被调用,并且文件被打开(程序抱怨它已损坏,正确)WriteAllBytes
然后抱怨文件在另一个进程中打开。这里发生了什么?!出于好奇,这是用于打开文件的代码:
System.Diagnostics.Process.Start(Path.Combine(temp, node.Name));
有没有人经历过这种奇怪的事情?还是我是一个金发女郎并且做错了什么?
如果它确实阻塞,可能是什么导致了这个问题?
编辑:我会提出完整的方法。
var node = item.Tag as FileNode;
stuffFile.Position = node.FileOffset;
string temp = Path.GetTempPath();
File.WriteAllBytes(Path.Combine(temp, node.Name), stuffFile.Read(0, node.FileHeader.FileSize));
System.Diagnostics.Process.Start(Path.Combine(temp, node.Name));
似乎正在发生的事情是在完成Process.Start
之前被调用WriteAllBytes
,并且它试图打开文件,然后WriteAllBytes
抱怨另一个进程持有文件的锁。