Implementace asynchronního vstupu a výstupu souboru

Dokončeno

Vstupní a výstupní operace souborů jsou nezbytné pro mnoho aplikací, což jim umožňuje číst a zapisovat do souborů na pevném disku. V jazyce C# je možné vstup a výstup souboru (vstupně-výstupní operace) provádět synchronně nebo asynchronně. Asynchronní vstupně-výstupní operace souborů jsou užitečné zejména pro zlepšení výkonu a odezvy aplikací, zejména ve scénářích, kdy operace se soubory můžou výrazně trvat, například čtení velkých souborů nebo zápis dat na pevný disk.

Vytváření asynchronních metod pro čtení a zápis souborů

Klíčová async slova a await klíčová slova v jazyce C# umožňují vytvářet asynchronní metody, které mohou provádět vstupně-výstupní operace souborů bez blokování hlavního vlákna. To je zvlášť užitečné v aplikacích s uživatelským rozhraním, kde blokování hlavního vlákna může vést k ukotvení nebo nereagování uživatelského rozhraní. System.IO a System.Text.Json obory názvů poskytují třídy a metody pro asynchronní provádění souborových I/O operací.

Například File třída v System.IO oboru názvů poskytuje metody pro čtení a zápis souborů asynchronně. Metoda File.ReadAllTextAsync čte obsah souboru asynchronně, zatímco File.WriteAllTextAsync metoda zapisuje text do souboru asynchronně. Tyto metody vrací hodnotu Task<string> nebo Task, která představuje asynchronní operaci, což vám umožňuje použít klíčové slovo await ke čekání na jejich dokončení, aniž by se zablokovalo volací vlákno.

V prostředí názvů System.Text.Json třída JsonSerializer poskytuje asynchronní metody pro serializaci a deserializaci dat JSON. Metoda JsonSerializer.SerializeAsync serializuje objekt na řetězec JSON asynchronně, zatímco JsonSerializer.DeserializeAsync metoda deserializuje řetězec JSON na objekt asynchronně. Tyto metody také vrací metodu Task , která představuje asynchronní operaci.

Následující ukázka kódu ukazuje, jak vytvořit asynchronní metody serializace objektu C#, zapsat řetězec JSON do souboru, číst obsah souboru do řetězce a deserializovat řetězec JSON zpět do objektu C#:


using System;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;

public class Account
{
    public string Name { get; set; }
    public decimal Balance { get; set; }
}

public class Program
{
    public static async Task Main()
    {
        // Combine a directory and file name, then create the directory if it doesn't exist
        string directoryPath = @"C:\TempDir";
        if (!Directory.Exists(directoryPath))
        {
            Directory.CreateDirectory(directoryPath);
        }

        string fileName = "account.json";
        string filePath = Path.Combine(directoryPath, fileName);

        Account account = new Account { Name = "Elize Harmsen", Balance = 1000.00m };

        // Save account data to a file asynchronously
        await SaveAccountDataAsync(filePath, account);

        // Load account data from the file asynchronously
        Account loadedAccount = await LoadAccountDataAsync(filePath);
        Console.WriteLine($"Name: {loadedAccount.Name}, Balance: {loadedAccount.Balance}");
    }

    public static async Task SaveAccountDataAsync(string filePath, Account account)
    {
        string jsonString = JsonSerializer.Serialize(account);
        await File.WriteAllTextAsync(filePath, jsonString);
    }

    public static async Task<Account> LoadAccountDataAsync(string filePath)
    {
        string jsonString = await File.ReadAllTextAsync(filePath);
        return JsonSerializer.Deserialize<Account>(jsonString);
    }
}

V tomto příkladu SaveAccountDataAsync metoda serializuje Account objekt do řetězce JSON a zapíše ho do souboru asynchronně. Metoda LoadAccountDataAsync načte řetězec JSON ze souboru a deserializuje ho zpět do objektu Account asynchronně. Metoda Main ukazuje, jak volat tyto asynchronní metody pomocí klíčového await slova.

Díky tomu může aplikace provádět vstupně-výstupní operace souborů bez blokování hlavního vlákna, což zlepšuje výkon a rychlost odezvy. Metoda Directory.CreateDirectory se používá k vytvoření adresáře, pokud neexistuje, a zajišťuje, že soubor lze úspěšně zapsat.

Shrnutí

V této lekci jste se naučili implementovat asynchronní vstupní a výstupní operace souborů v jazyce C#. Prozkoumali jste použití klíčových slov async a await k vytváření asynchronních metod pro čtení a zápis souborů. Pomocí těchto technik můžete zlepšit výkon a rychlost odezvy aplikací při provádění vstupně-výstupních operací souborů.

Klíčové body

  • Vstupní a výstupní operace souborů je možné provádět synchronně nebo asynchronně v jazyce C#.
  • Asynchronní vstupně-výstupní operace souborů vylepšuje výkon a odezvu aplikace.
  • Klíčová async slova a await klíčová slova slouží k vytvoření asynchronních metod pro vstupně-výstupní operace souborů.
  • System.IO a System.Text.Json obory názvů poskytují třídy a metody pro asynchronní provádění souborových I/O operací.
  • Třída File a třída JsonSerializer se používají v poskytnutém příkladu k demonstraci asynchronních vstupně-výstupních operací se soubory.