Aracılığıyla paylaş


ReadAsync veya WriteAsync tamamlandıktan sonra FileStream.Position güncelleştirmeleri

FileStream.Position artık veya tamamlandıktan sonra ReadAsyncWriteAsync güncelleştirilir.

Açıklama değiştirildi

Windows'un önceki .NET sürümlerinde, FileStream.Position zaman uyumsuz okuma veya yazma işlemi başlatıldıktan sonra güncelleştirildi. .NET 6'dan FileStream.Position başlayarak iyimser bir şekilde güncelleştirilir:

  • Başladıktan sonra WriteAsync , ancak işlem başarısız olursa veya iptal edilirse, konum düzeltilir.
  • Başlatıldığında ReadAsync , ancak tüm arabellek okunmazsa, işlem tamamlandıktan sonra konum düzeltilir.

Sürüm kullanıma sunulmuştur

.NET 6

Değişiklik nedeni

FileStream hiçbir zaman iş parçacığı güvenli olmamıştı, ancak .NET 6'ya kadar .NET, Windows'da zaman uyumsuz yöntemlerine (ReadAsync ve WriteAsync) yönelik birden çok eşzamanlı çağrıyı desteklemeye çalıştı.

Bu değişiklik ile %100 zaman uyumsuz dosya G/Ç'sine FileStream izin vermek ve aşağıdaki sorunları çözmek için kullanıma sunulmuştur:

  • Kodunuz paralel okuma veya yazma işlemleri gerçekleştirdiğinden okuma veya yazma başlamadan önce ayarlanmasına güveniyorsanızFileStream.Position, bunun yerine API'yi kullanmaya System.IO.RandomAccess geçmeniz gerekir. RandomAccess API, paralel dosya işlemleri için tasarlanmıştır.

  • .NET 6'da .NET 5 davranışını etkinleştirmek için bir AppContext anahtar veya ortam değişkeni belirtin. anahtarını olarak trueayarlayarak .NET 6'da yapılan FileStream tüm performans geliştirmelerini geri çevirmiş olursunuz.

    {
        "configProperties": {
            "System.IO.UseNet5CompatFileStream": true
        }
    }
    
    set DOTNET_SYSTEM_IO_USENET5COMPATFILESTREAM=1
    

    Önemli

    Bu anahtar yalnızca .NET 6'da kullanılabilir. .NET 7'de kaldırıldı.

Etkilenen API’ler