4

たとえば、System.IO.File クラスを見ると、静的メソッドExists表示されますが、対応するメソッドは表示されませんExistsAsyncFile.Exists問題のファイルがたとえばネットワーク共有上にある場合、かなりの時間ブロックされる可能性があると思います。確かに、いつでも を使用できますTask.Runが、それは I/O 完了ポートを使用しません。

Fileクラスの他の多くの静的メソッドについても同じことが言えます。

4

1 に答える 1

2

なぜ方法がないのかわかりませんFile.ExistsAsyncExists「メソッドを呼び出してファイルに対して削除などの別の操作を実行するまでの間に、別のプロセスがファイルに対して何かを実行する可能性がある」可能性があり、アクセスするアプリケーションの適切な機能を確保するために例外をキャッチする必要がある可能性があります既存のファイル。

いずれにせよ、自分で書くことができます。

public static async Task<bool> FileExistsAsync(string file)
{
    return await Task.Factory.StartNew(() => File.Exists(file));
}

...もちろん、非同期IOを取得するためにIO Completionを使用しません...

更新: File は一般的に便利なラッパーだと思います。File非同期機能を提供する他の A​​PI を使用して、提供されるほとんどすべてのことを行うことができます。の場合、ExistsIO Completion ポートを使用できるものは何も使用せず、FindFirstFileを呼び出してエラーをチェックするだけです。

于 2012-09-22T14:40:11.583 に答える