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.
FileStream.Position wird jetzt aktualisiert, nachdem ReadAsync oder WriteAsync abgeschlossen ist.
Änderungsbeschreibung
In früheren Versionen von .NET unter Windows wurde FileStream.Position nach Start des asynchronen Lese- oder Schreibvorgangs aktualisiert. Ab .NET 6 FileStream.Position wird optimistisch aktualisiert:
- Nachdem WriteAsync gestartet wurde, aber wenn der Vorgang fehlschlägt oder abgebrochen wird, wird die Position korrigiert.
- Wenn ReadAsync gestartet wird, aber der gesamte Puffer nicht gelesen wird, wird die Position nach Abschluss des Vorgangs korrigiert.
Eingeführte Version
.NET 6
Grund für Änderung
FileStream war nie threadsicher, aber bis .NET 6 hat .NET versucht, mehrere gleichzeitige Aufrufe seiner asynchronen Methoden (ReadAsync und WriteAsync) unter Windows zu unterstützen.
Diese Änderung wurde eingeführt, um einen zu 100 Prozent asynchronen Datei-E/A mit FileStream zu ermöglichen und die folgenden Probleme zu beheben:
- FileStream.FlushAsync beendet synchrone Schreibvorgänge
- Win32 FileStream wandelt asynchrone Lesevorgänge in Synchronisierungslesevorgänge um.
Empfohlene Aktion
Wenn Sie darauf angewiesen sind, dass FileStream.Position vor dem Beginn des Lese- oder Schreibvorgangs festgelegt wird, weil Ihr Code parallele Lese- oder Schreibvorgänge ausführt, sollten Sie stattdessen auf die Verwendung der System.IO.RandomAccess API umstellen. Die RandomAccess API wurde für parallele Dateivorgänge entwickelt.
Um das .NET 5-Verhalten in .NET 6 zu aktivieren, geben Sie einen
AppContext
Switch oder eine Umgebungsvariable an. Durch das Festlegen der Option auftrue
deaktivieren Sie alle Leistungsverbesserungen, die inFileStream
in .NET 6 vorgenommen wurden.{ "configProperties": { "System.IO.UseNet5CompatFileStream": true } }
set DOTNET_SYSTEM_IO_USENET5COMPATFILESTREAM=1
Von Bedeutung
Dieser Switch ist nur in .NET 6 verfügbar. Sie wurde in .NET 7 entfernt.