ReadAll***
/WriteAll***
/のように、File
クラスにはかなり便利な方法があります。どこにあるのFIle.ReadAll *** Async/WriteAll *** Async/AppendAll ***非同期メソッドですか?
私はそれらの非同期の対応が必要な場合、多くのケースに直面していますが、それらは存在しません。
なぜですか?落とし穴がありますか?
これらのメソッドは簡単に実装できますが、フレームワークでそれらを実装しない理由は何ですか?
ReadAll***
/WriteAll***
/のように、File
クラスにはかなり便利な方法があります。どこにあるのFIle.ReadAll *** Async/WriteAll *** Async/AppendAll ***非同期メソッドですか?
私はそれらの非同期の対応が必要な場合、多くのケースに直面していますが、それらは存在しません。
なぜですか?落とし穴がありますか?
これらのメソッドは簡単に実装できますが、フレームワークでそれらを実装しない理由は何ですか?
"...私は非同期の対応が必要ですが、存在しません。なぜですか?"
(心の中で非同期で開発された新しいライブラリを含まない)非同期のawaitと一緒に.NETフレームワークに追加されたXXXAsync
方法のすべては、単にBeginXXX
/EndXXX
のラッパーです。
彼らは新しい非同期操作を追加せず、古いものを新しいタスクベースのものに変換しました。たとえば、これはUdpClient.SendAsync
です:
public Task<int> SendAsync(byte[] datagram, int bytes)
{
return Task<int>.Factory.FromAsync(BeginSend, EndSend, datagram, bytes, null);
}
File.BeginReadAll
とFile.EndReadAll
何が存在しないので、それはFile.ReadAllAsync
はありませんことを理解できるのです。
落とし穴がありますか?
これらのメソッドを実装した唯一の落とし穴は、真に非同期的なやり方で、非同期的ではないことです。
Downvoter、説明はありますか? – Dennis
おそらく私はあなたの質問を理解できませんが、これでは十分ではありませんか? 'static async Task WriteAllTextAsync(文字列パス、文字列の内容){Task.Run(()=> File.WriteAllText(path、contents))を待つ。 } ' –
@codroipo:これは" async over sync "と呼ばれ、避けなければなりません。たとえば、次の記事を参照してください。http://blog.stephencleary.com/2013/10/taskrun-etiquette-and-proper-usage.html – Dennis