例如,查看 System.IO.File 类,我看到了静态方法,Exists
但没有看到任何ExistsAsync
对应物。File.Exists
如果有问题的文件位于网络共享上,我怀疑可能会阻塞很长一段时间。当然,我总是可以使用Task.Run
,但这不会使用 I/O 完成端口。
我可以对File
类的许多其他静态方法提出同样的问题。
例如,查看 System.IO.File 类,我看到了静态方法,Exists
但没有看到任何ExistsAsync
对应物。File.Exists
如果有问题的文件位于网络共享上,我怀疑可能会阻塞很长一段时间。当然,我总是可以使用Task.Run
,但这不会使用 I/O 完成端口。
我可以对File
类的许多其他静态方法提出同样的问题。
我不知道为什么没有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并检查错误。