【发布时间】:2014-10-01 22:00:41
【问题描述】:
我很好奇在 BeginWrite 实际完成写入之前对 byte[] 进行更改是否会影响 FileStream 最终写入的内容。
我在下面有这段代码,currentPage 是一个字节[],其中包含我要写入的数据。
try
{
FileStream.BeginWrite(currentPage, 0, currentPage.Length, new AsyncCallback(EndWriteCallback),new State(logFile.fs, currentPage, BUFFER_SIZE, manualEvent));
manualEvent.WaitOne();
}
catch (Exception e)
{
//handle exception here
}
我在一个循环中有这个,它将替换 currentPage 中的数据。如果我对 currentPage 进行更改(例如分配一个全为 0 的新字节 [])会发生什么? FileStream 是否缓冲要写入某处的 byte[] 还是实际上只是引用了我在调用它时传入的 byte[]?
我尝试查看 MSDN 文章,但我只能找到
多个同时异步请求导致请求完成顺序不确定。
谁能给我解释一下?
【问题讨论】:
-
对我来说,“不确定的完成顺序”意味着该函数不是线程安全的,这可能意味着对
byte[]执行任何操作都可能导致意想不到的后果。 -
是的,设备驱动程序直接从 currentPage 读取。 More here.
标签: c# asynchronous file-io