例如,查看System.IO.File类,我看到了静态Exists
方法,但我没有看到任何ExistsAsync
对应方法。我怀疑File.Exists
可能会阻塞一段时间,如果有问题的文件是在网络共享上。当然,我总是可以使用Task.Run
,但这不会使用I / O完成端口。
我可以对File
类的许多其他静态方法提出同样的问题。
答案 0 :(得分:2)
我不知道为什么没有File.ExistsAsync
方法。可能是“在您调用Exists
方法并对文件执行另一操作(例如删除”)之间,另一个进程可能会对文件执行某些操作,并且仍需要捕获异常以确保正常运行访问现有文件的应用程序。
无论如何,你可以写自己的。
public static async Task<bool> FileExistsAsync(string file)
{
return await Task.Factory.StartNew(() => File.Exists(file));
}
...当然不使用IO Completion来获取异步IO ...
更新:我认为File通常是一个方便的包装器。您可以使用其他提供异步功能的API来完成File
提供的几乎所有内容。在Exists
的情况下,它不使用任何可以使用IO完成端口的东西,它只调用FindFirstFile并检查错误。