4

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

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

4

1 回答 1

2

我不知道为什么没有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完成几乎所有提供的操作。在 的情况下Exists,它不使用任何可以使用 IO 完成端口的东西,它只是调用FindFirstFile并检查错误。

于 2012-09-22T14:40:11.583 回答