我爱上了异步和等待,但是我无法弄清楚如何在不使用 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;
}

最佳答案

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

因此,最好的解决方案是做一个类似的解决方法:使用 Task.Run 。不过,我会将所有 FileStream 代码包装在 Task.Run 中。

关于c# - 是否有相当于 : Storagefile. Openasync 的 .NET 4.5,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25513880/

10-17 01:54