たとえば、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を取得するためにIO Completionを使用しません...
更新: File は一般的に便利なラッパーだと思います。File
非同期機能を提供する他の API を使用して、提供されるほとんどすべてのことを行うことができます。の場合、Exists
IO Completion ポートを使用できるものは何も使用せず、FindFirstFileを呼び出してエラーをチェックするだけです。