FileStream.Position は、 ReadAsync または WriteAsync が完了した後に更新されるようになりました。
変更の説明
Windows の以前の .NET バージョンでは、非同期の読み取りまたは書き込み操作の開始後に FileStream.Position が更新されました。 .NET 6 以降では、 FileStream.Position は楽観的に更新されます。
- WriteAsyncが開始された後、操作が失敗した場合、または取り消された場合、位置は修正されます。
- ReadAsync開始したが、バッファー全体が読み取られない場合、操作の完了後に位置が修正されます。
導入されたバージョン
.NET 6
変更の理由
FileStream はスレッド セーフではありませんでしたが、.NET 6 まで、.NET は Windows 上の非同期メソッド (ReadAsync と WriteAsync) への複数の同時呼び出しをサポートしようとしました。
この変更は、 FileStream で 100% の非同期ファイル I/O を許可し、次の問題を修正するために導入されました。
推奨されるアクション
コードがFileStream.Position読み取りまたは書き込みを実行するため、読み取りまたは書き込みの開始前に設定に依存している場合は、代わりに System.IO.RandomAccess API を使用するように切り替える必要があります。 RandomAccess API は、並列ファイル操作用に設計されています。
.NET 6 で .NET 5 の動作を有効にするには、
AppContextスイッチまたは環境変数を指定します。 スイッチをtrueに設定すると、.NET 6 のFileStreamに対して行われたすべてのパフォーマンス向上をオプトアウトできます。{ "configProperties": { "System.IO.UseNet5CompatFileStream": true } }set DOTNET_SYSTEM_IO_USENET5COMPATFILESTREAM=1Von Bedeutung
このスイッチは、.NET 6 でのみ使用できます。 .NET 7 で削除されました。
影響を受ける API
.NET