看着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/