Sdílet prostřednictvím


Aktualizace FileStream.Position po dokončení operace ReadAsync nebo WriteAsync

FileStream.Position je nyní aktualizován po ReadAsync dokončení nebo WriteAsync dokončení.

Změna popisu

V předchozích verzích .NET ve Windows FileStream.Position byla aktualizována po spuštění asynchronní operace čtení nebo zápisu. Počínaje rozhraním .NET 6 FileStream.Position se aktualizuje optimisticky:

  • Po WriteAsync spuštění, ale pokud operace selže nebo je zrušena, pozice se opraví.
  • Když ReadAsync se spustí, ale pokud se nečte celá vyrovnávací paměť, pozice se opraví po dokončení operace.

Zavedená verze

.NET 6

Důvod změny

FileStream nikdy nebyla bezpečná pro přístup z více vláken, ale dokud se .NET 6 nepokoušela podporovat více souběžných volání svých asynchronních metod (ReadAsync a WriteAsync) ve Windows.

Tato změna byla zavedena tak, aby umožňovala 100% asynchronní vstupně-výstupní operace se FileStream soubory a opravila následující problémy:

  • Pokud se spoléháte na FileStream.Position nastavení před spuštěním čtení nebo zápisu, protože váš kód provádí paralelní čtení nebo zápisy, měli byste místo toho přepnout na použití System.IO.RandomAccess rozhraní API. Rozhraní RandomAccess API je navržené pro paralelní operace se soubory.

  • Pokud chcete povolit chování .NET 5 v .NET 6, zadejte AppContext přepínač nebo proměnnou prostředí. Nastavením přepínače na truemožnost se odhlásíte ze všech vylepšení výkonu provedených FileStream v .NET 6.

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

    Důležité

    Tento přepínač je k dispozici pouze v .NET 6. Byl odebrán v .NET 7.

Ovlivněná rozhraní API