System.IOの単純なファイルシステムアクションが非同期(ファイルの移動、ファイルの削除)ではないことがわかります。その原則に従う - 小さなクエリが非同期であるべきか?もしそうなら、小さなクエリの境界は何ですか? < 5 ms? < 50 ms?小さなクエリを非同期にする必要がありますか?
答えて
非同期APIが利用可能な場合、同期呼び出しを使用する理由はほとんどありません。トリッキーな部分は、多くの操作に非同期APIがないことです。
System.IO
の仕組みの基礎は、ネットワークドライブ(はるかに「クラウドストレージ」が少ない)が比較的稀で、ドライブが少ない過去の設計決定に根ざしています。 「オープンファイル」のような操作には非同期APIはなく、非同期APIを持つものには必ずしも.NETで利用できるわけではありません。
非同期呼び出しのコストを考える必要はほとんどありません。どのI/O操作と比較しても無視できる程度です。したがって、実際のI/Oが関与していないケースについて考えることが、トリックです。例えば、ファイルをバイト単位で読み込む場合、実際にはメモリ内のバッファから読み込み、非同期オーバーヘッドが重要。しかし、代わりに同期APIを使用していないので、個々のバイトではなく、合理的なデータのまとまりでバッファリングが確実に行われます。
非同期APIが本質的に遅くなることは何もありません。たとえば、Windowsの同期ファイルAPIは引き続き非同期APIを呼び出し、結果を待つ(フラグにはいくつかの違いがありますが、何も重要ではありません)。 Windows 2000(IIRCの95年のWindowsでのサポートは少し難解だったので)以来、デスクトップWindowsの世界では本当の同期I/O操作はありませんでした。
ファイルシステムAPIが今日設計されている場合、File.Move
はとなります。確かには非同期操作です。実際、Windows APIには、2つの最新のバリアント、MoveFileEx
とMoveFileWithProgress
があります。両方とも非同期です。唯一の問題は、.NETがそれらを直接公開しないため、P/Invokeを使用して呼び出す必要があることです。言うまでもなく、それらはネットワーク共有に非常に便利です。
- 1. 非同期メソッドを待つ必要がありますか?
- 2. 非同期メソッドを待つ必要がありますか?
- 3. System.Net.WebClient - 非同期を使用する必要があります
- 4. ArrayBlockingQueueラッパーメソッドを同期させる必要がありますか?
- 5. memorystreamsで非同期I/Oを使用する必要がありますか?
- 6. Spring:Servlet 3.1 + SockJS =非同期サポートを有効にする必要があります
- 7. 非同期コールバックが必要ですか?
- 8. シングルトンメソッドを同期する必要がありますか?
- 9. OnTerminateを同期する必要がありますか?
- 10. RPC要求のための非同期および同期インタフェースを作成する必要があります
- 11. なぜこの変数を同期させる必要がありますか
- 12. C#threadingタイマーは、非同期ソケットコードを停止する必要があります
- 13. ReferenceQueueで同期する必要がありますか?
- 14. デフォルトで非同期I/Oを使用するように切り替える必要がありますか?
- 15. 私はこれを同期する必要があります
- 16. 非同期操作の頭を包み込む必要があります
- 17. Java:ExecutorServiceを同期する必要はありますか?
- 18. この操作では、ページを非同期にする必要があります(Async属性をtrueに設定する必要があります)。
- 19. Java RabbitMQ ClientのConfirmListenerを同期させる必要がありますか?
- 20. この非同期関数をテストするにはモック/スタブを作成する必要がありますか?
- 21. ビューを更新するために、非同期タスクをフラグメントで実行する必要がありますか?
- 22. 非同期で使用されるオブジェクトはいつリリースする必要がありますか?
- 23. なぜこのコードを非同期で実行する必要がありますか?
- 24. 非同期の反復処理にはprocess.nextTickまたはsetImmediateを使用する必要がありますか?
- 25. 初期化ベクトルは非表示にする必要がありますか?
- 26. 私の非同期コールをCPUの数に応じてチャンクに分割する必要がありますか?
- 27. iCloudにどのデータを同期する必要がありますか?
- 28. ページネーミングするコンポーネントに初期クエリは必要ありません
- 29. iOSでASIHTTPRequest非同期呼び出しをどのように処理する必要がありますか?
guiでIOを実行している場合は、ストールが発生する可能性があります。アニメーションに50msのストールがあります。それはすべてに依存します。現在のソリューションでは何が受け入れられるのでしょうか。 –
[最近デザインされたAPI](https://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.storagefile.aspx)を見ると、別の印象を与えることがあります。 –
@Damien_The_Unbeliever素敵な人、それを見たことはありません... –