Aracılığıyla paylaş


ReadAsync veya WriteAsync tamamlandıktan sonra FileStream.Position güncellenir.

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

Açıklamayı değiştir

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:

  • WriteAsync başladıktan sonra, ancak işlem başarısız olursa veya iptal edilirse konum düzeltilir.
  • ReadAsync başlatıldığında, 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 üzerinde eşzamansız yöntemlerine (ReadAsync ve WriteAsync) yönelik birden çok eşzamanlı çağrıyı desteklemeye çalıştı.

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

  • Kodunuz FileStream.Position okuma veya yazma işlemleri gerçekleştirdiğinden okuma veya yazma başlamadan önce ayarlanmasına güveniyorsanız, 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ı true olacak şekilde ayarlayarak FileStream'de yapılan tüm performans iyileştirmelerinden vazgeçmiş 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