.net 缺少异步重载?

.net 缺少异步重载?,.net,.net-4.5,async-await,.net,.net 4.5,Async Await,例如,查看这个类,我看到静态的Exists方法,但没有看到任何ExistsAsync对应的方法。我怀疑File.Exists可能会在相当长的一段时间内阻止所讨论的文件,比如说,在网络共享上。当然,我可以始终使用任务。运行,但这不会使用I/O完成端口 对于File类的许多其他静态方法,我也可以问同样的问题。我不知道为什么没有File.ExistsAsync方法。可能是“在调用Exists方法和对文件执行另一个操作(如Delete)之间,另一个进程可能会对文件执行某些操作”,并且仍然需要捕获异常以确

例如,查看这个类,我看到静态的
Exists
方法,但没有看到任何
ExistsAsync
对应的方法。我怀疑
File.Exists
可能会在相当长的一段时间内阻止所讨论的文件,比如说,在网络共享上。当然,我可以始终使用
任务。运行
,但这不会使用I/O完成端口


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

我不知道为什么没有
File.ExistsAsync
方法。可能是“在调用
Exists
方法和对文件执行另一个操作(如Delete)之间,另一个进程可能会对文件执行某些操作”,并且仍然需要捕获异常以确保访问现有文件的应用程序的功能正常

无论如何,你可以自己写

public static async Task<bool> FileExistsAsync(string file)
{
    return await Task.Factory.StartNew(() => File.Exists(file));
}
公共静态异步任务文件existsasync(字符串文件)
{
返回wait Task.Factory.StartNew(()=>File.Exists(File));
}
…当然不会使用IO完成来获取异步IO


更新:我认为文件通常是一个方便的包装器。您可以使用提供异步功能的其他API来完成
File
提供的几乎所有操作。在
存在的情况下
,它不使用任何可能使用IO完成端口的东西,它只是调用并检查错误。

可能是“在调用Exists方法和对文件执行其他操作(如Delete)之间,另一个进程可能会对文件执行某些操作”-基于这种理由,您可能也没有文件。存在。。我的问题仍然代表其他重载,比如
ReadAllLines
我明白你的意思。那么您的意思是,对于大多数操作,您可以使用文件流,而对于其他操作(exists、set attribute等),您无论如何都不能使用完成端口?是的,
FindFirstFile
不使用异步IO(它永远不能,因为它不对文件执行任何IO)。在某种程度上,他们必须权衡设计和实现完美的基类库,并在合理的时间内将其发布<除了code>File.Exists
之外,我认为大多数其他方法都是“方便”的,考虑到您可以通过其他新的*异步方法完成所有这些工作,他们觉得这些工作不值得缺点。