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

时间:2014-08-26 19:37:07

标签: c# .net async-await

我爱上异步并等待,但是我无法弄清楚如何在不使用Task.Run的情况下等待文件打开。好像有API in WRT。 .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;
}

2 个答案:

答案 0 :(得分:7)

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

因此,最佳解决方案是执行类似的解决方法:使用Task.Run。我会在FileStream中包含所有Task.Run代码。

答案 1 :(得分:0)

我在async方法中使用https://github.com/tejacques/AsyncBridge时没有使用Task.Run获得了很好的体验,虽然从语法上看它看起来有些相似,但更安全。