是否有.NET 4.5等效于:Storagefile.Openasync

Mik*_*rry 4 .net c# async-await

我爱上异步并等待,但是我无法弄清楚如何在不使用Task.Run的情况下等待文件打开.在WRT中似乎有一个API..NET 4.5等价于哪里?我问,因为如果我在远程计算机上访问UNC共享,如果计算机出现故障或由于某种原因没有响应网络请求,则可能会长时间阻塞.这似乎是一个如此大的网站.

using (FileStream stream = await Task.Run(() => new FileStream(@"c:\temp\text.txt", FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read, 4096, true)))
{
  byte[] bytesToRead = new byte[stream.Length];    
  await stream.ReadAsync(bytesToRead, 0, bytesToRead.Length).ConfigureAwait(false);
  return bytesToRead;
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 7

不幸的是,即使文件打开在设备驱动程序级别是异步的,也没有用于打开异步文件的Win32 API.这就是为什么没有.NET等价物的原因; 我不确定,但我怀疑WinRT API是通过将它排队到线程池来伪造异步操作.

因此,最佳解决方案是执行类似的解决方法:使用Task.Run.不过,我会把所有FileStream代码都包装好Task.Run.

  • 只是在谷歌搜索后添加一些信息."我将此线程作为功能建议发送给I/O经理人员.能够在没有延迟的情况下打开网络上的文件可能很有用,尽管很难将尚不存在的文件与完成端口关联起来,如果它发生的话,它可能最终成为一个事件驱动的过程." [链接](http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.kernel/2006-08/msg00308.html) (3认同)