Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
ZipArchive.CreateAsync lädt nun sofort alle ZIP-Archiveinträge während des Methodenaufrufs. Diese Änderung stellt sicher, dass beim Zugriff auf die Eigenschaft ZipArchive.Entries keine synchronen Lesevorgänge auf dem zugrunde liegenden Stream ausgeführt werden, was mit asynchronen Programmiermustern übereinstimmt.
Eingeführt in Version
.NET 11 Preview 1
Vorheriges Verhalten
Wenn Sie zuvor ein ZipArchive mit CreateAsync erstellt haben, kann der Zugriff auf die Entries-Eigenschaft dazu führen, dass synchrone (blockierende) Lesevorgänge auf dem zugrunde liegenden Datenstrom ausgeführt werden. Dieses Verhalten war mit der asynchronen Art der CreateAsync Methode inkonsistent und konnte Probleme mit Datenströmen verursachen, die synchrone Lesevorgänge nicht unterstützen.
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;
Neues Verhalten
Ab .NET 11 wird das zentrale Verzeichnis des ZIP-Archivs asynchron als Teil des ZipArchive.CreateAsync Methodenaufrufs gelesen. Alle Ausnahmen im Zusammenhang mit falsch formatierten Einträgen oder Problemen beim Lesen des zentralen Verzeichnisses werden nun während des CreateAsync-Aufrufs ausgelöst. Der nachfolgende Zugriff auf die Entries Eigenschaft führt keine Lesevorgänge für den zugrunde liegenden Datenstrom aus.
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;
Art der einschneidenden Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für Änderung
Diese Änderung wurde vorgenommen, um die Konsistenz und Zuverlässigkeit beim Arbeiten mit asynchronen Datenströmen zu verbessern. Durch das eifrige Laden von Einträgen während des CreateAsync Aufrufs vermeidet die API später unerwartete synchrone Lesevorgänge. Das Vermeiden synchroner Lesevorgänge ist besonders wichtig für Datenströme, die möglicherweise blockieren, bis Daten verfügbar sind (z. B. Netzwerkdatenströme). Dies entspricht dem genehmigten API-Design und bietet eine vorhersehbarere Programmiererfahrung.
Weitere Informationen finden Sie unter dotnet/runtime#121938, dotnet/runtime#121624 und der API-Entwurfsdiskssion.
Empfohlene Aktion
Wenn Ihr Code ZipArchive.CreateAsync verwendet, stellen Sie sicher, dass Sie Ausnahmen vom Methodenaufruf InvalidDataException behandelnCreateAsync. Diese Ausnahme konnte bereits in früheren .NET-Versionen ausgelöst werden (z. B. wenn das ZIP-Zentralverzeichnis nicht gefunden werden kann), aber jetzt wird sie auch für falsch formatierte Einträge ausgelöst, die zuvor nur beim Zugriff auf die Entries Eigenschaft ermittelt wurden.