Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ZipArchive.CreateAsync şimdi yöntem çağrısı sırasında tüm ZIP arşiv girdilerini hevesle yükler. Bu değişiklik, ZipArchive.Entries özelliğine erişimin, altındaki akışta senkron okumalar gerçekleştirmemesini sağlar ve bu da zaman uyumsuz programlama desenleriyle uyumludur.
Sürüm kullanıma sunulmuştur
.NET 11 Önizleme 1
Önceki davranış
Daha önce ZipArchive kullanarak bir CreateAsync oluşturduğunuzda, Entries özelliğine erişmek, temel alınan akışta zaman uyumlu (engelleme) okuma işlemlerinin gerçekleştirilmesine neden olabilir. Bu davranış, CreateAsync metodunun zaman uyumsuz doğasıyla tutarsızdı ve eşzamanlı okumaları desteklemeyen akışlarla ilgili sorunlara neden olabilir.
using System.IO;
using System.IO.Compression;
using var stream = new FileStream("archive.zip", FileMode.Open);
using var archive = await ZipArchive.CreateAsync(stream, ZipArchiveMode.Read);
// This call performs synchronous reads on the stream.
// Might throw if the file entries are malformed
// or if the stream doesn't support synchronous reads.
var entries = archive.Entries;
Yeni davranış
.NET 11'den başlayarak, ZIP arşivinin merkezi dizini yöntem çağrısının ZipArchive.CreateAsync bir parçası olarak zaman uyumsuz olarak okunur. Hatalı biçimlendirilmiş girişlerle veya merkezi dizini okuma sorunlarıyla ilgili tüm özel durumlar artık CreateAsync çağrısı sırasında fırlatılır. Sonraki Entries özelliğine erişim, temel alınan veri akışında herhangi bir okuma işlemi gerçekleştirmez.
using System.IO;
using System.IO.Compression;
using var stream = new FileStream("archive.zip", FileMode.Open);
// This call eagerly loads the ZIP archive entries.
// Any exceptions related to malformed entries are surfaced here.
using var archive = await ZipArchive.CreateAsync(stream, ZipArchiveMode.Read);
// Accessing Entries no longer performs stream read operations.
var entries = archive.Entries;
Kesinti yaratan değişiklik türü
Bu değişiklik davranışsal bir değişikliktir.
Değişiklik nedeni
Bu değişiklik, zaman uyumsuz akışlarla çalışırken tutarlılığı ve güvenilirliği geliştirmek için yapılmıştır. API, çağrı sırasında CreateAsync girişlerini hızlı bir şekilde yükleyerek daha sonra beklenmeyen zaman uyumlu okuma işlemlerini önler. Eşzamanlı okumalardan kaçınmak, veriler kullanılabilir duruma gelene kadar engelleyen (örneğin, ağ akışları) akışlar için özellikle önemlidir. Bu, onaylanan API tasarımıyla uyumlu hale gelir ve daha öngörülebilir bir programlama deneyimi sağlar.
Daha fazla bilgi için bkz. dotnet/runtime#121938, dotnet/runtime#121624 ve API tasarım tartışması.
Önerilen eylem
Kodunuz ZipArchive.CreateAsync kullanıyorsa, CreateAsync yöntemi çağrısından kaynaklanan InvalidDataException özel durumlarını işlediğinizden emin olun. Bu özel durum önceki .NET sürümlerinde (örneğin, ZIP merkezi dizini bulunamadığında) zaten fırlatılmış olabilir, ancak şimdi daha önce sadece Entries özelliğine erişildiğinde tespit edilen hatalı biçimlendirilmiş girdiler için de fırlatılmaktadır.