缺少异步重载?

时间:2012-09-22 14:09:50

标签: .net .net-4.5 async-await

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

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

1 个答案:

答案 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并检查错误。