.net - 缺少异步重载?

标签 .net .net-4.5 async-await

看着System.IO.File类,例如,我看到静态 Exists方法,但我没有看到任何 ExistsAsync对应物。我怀疑 File.Exists如果有问题的文件位于网络共享上,则可能会阻塞很长一段时间。当然,我总是可以使用 Task.Run ,但这不会使用 I/O 完成端口。

我可以对 File 的许多其他静态方法提出同样的问题。类(class)。

最佳答案

我不知道为什么没有 File.ExistsAsync方法。可能是“在您调用 Exists 方法并对文件执行另一个操作(例如删除)之间,另一个进程可能对文件执行某些操作”,并且仍然需要捕获异常以确保正常运行访问现有文件的应用程序。

无论如何,您可以自己编写。

public static async Task<bool> FileExistsAsync(string file)
{
    return await Task.Factory.StartNew(() => File.Exists(file));
}

...当然不使用 IO Completion 来获取异步 IO ...

更新:我认为 File 通常是一个方便的包装器。您可以做几乎所有 File提供使用其他 API 的产品,这些 API 确实提供了异步功能。在Exists的情况下,它不使用任何可以使用 IO 完成端口的东西,它只是调用 FindFirstFile并检查错误。

关于.net - 缺少异步重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12544473/

相关文章:

c# - 如何将字符串值分配给枚举并在开关中使用该值

c# - 为什么在尝试使用 C# 写入日志文件时出现 "URI formats are not supported"异常?

c# - 限制 AppDomain 程序集

c# - 接受 Expression<Func<T>> 表达式作为参数的扩展方法

c# - 使用 UI 线程调度程序调用为不同的线程异常编码获取接口(interface)?

c# - 使用异步数据读取器

c# - 从资源文件读取 Cursor 时抛出 ArgumentException

.net-4.0 - 安装 .Net 4.5 Beta 会破坏从同一台计算机构建 .Net 4.0 吗?

c# - VS 2010 中的 System.IO.Compression.FileSystem 程序集

c# - 异步操作后的 HttpContext.Current.Items