Share via


在 ReadAsync 或 WriteAsync 完成後更新 FileStream.Position

現在 ReadAsyncWriteAsync 完成後會更新 FileStream.Position

變更描述

在 Windows 上的舊版 .NET 中,FileStream.Position 已在非同步讀取或寫入作業開始後進行更新。 從 .NET 6 開始,FileStream.Position 以開放式方式進行更新:

  • WriteAsync 啟動之後,但如果作業失敗或取消,則會更正位置。
  • ReadAsync 啟動時,但如果未讀取整個緩衝區,則會在作業完成之後更正位置。

導入的版本

.NET 6

變更原因

FileStream 以往從未為安全執行緒,但到了 .NET 6,.NET 已嘗試於 Windows 支援非同步方法 (ReadAsyncWriteAsync) 的多個並行呼叫。

加入這項變更的目的是允許與 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=1
    

    重要

    此參數僅可用於 .NET 6。 它已在 .NET 7 中移除

受影響的 API