Implementer asynkront filinput og -output

Fuldført

Filinput- og outputhandlinger er vigtige for mange programmer, så de kan læse fra og skrive til filer på harddisken. I C#kan filinput og -output (fil-I/O) udføres synkront eller asynkront. Asynkron fil-I/O er især nyttig til at forbedre programmets ydeevne og svartid, især i scenarier, hvor filhandlinger kan tage lang tid, f.eks. læsning af store filer eller skrivning af data til harddisken.

Oprettelse af asynkrone metoder til læsning og skrivning af filer

Nøgleordene async og await i C# giver dig mulighed for at oprette asynkrone metoder, der kan udføre fil-I/O-handlinger uden at blokere hovedtråden. Dette er især nyttigt i programmer med en brugergrænseflade, hvor blokering af hovedtråden kan føre til en frosset eller ikke-reagerende brugergrænseflade. Navneområderne System.IO og System.Text.Json indeholder klasser og metoder til asynkron udførelse af fil-I/O-handlinger.

Klassen i File navneområdet indeholder f.eksSystem.IO. metoder til asynkron læsning og skrivning af filer. Metoden File.ReadAllTextAsync læser indholdet af en fil asynkront, mens metoden File.WriteAllTextAsync skriver tekst til en fil asynkront. Disse metoder returnerer en Task<string> eller Task , der repræsenterer den asynkrone handling, så du kan bruge nøgleordet await til at vente på fuldførelsen uden at blokere den kaldende tråd.

System.Text.Json I navneområdet JsonSerializer indeholder klassen asynkrone metoder til serialisering og deserialisering af JSON-data. Metoden JsonSerializer.SerializeAsync serialiserer et objekt til en JSON-streng asynkront, mens JsonSerializer.DeserializeAsync metoden deserialiserer en JSON-streng til et objekt asynkront. Disse metoder returnerer også en Task , der repræsenterer den asynkrone handling.

Følgende kodeeksempel viser, hvordan du opretter asynkrone metoder, der serialiserer et C#-objekt, skriver JSON-strengen til en fil, læser filindholdet i en streng og deserialiserer JSON-strengen til et C#-objekt:


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);
    }
}

I dette eksempel SaveAccountDataAsync serialiserer metoden et Account objekt til en JSON-streng og skriver det asynkront til en fil. Metoden LoadAccountDataAsync læser JSON-strengen fra filen og deserialiserer den til et Account objekt asynkront. Metoden Main viser, hvordan du kalder disse asynkrone metoder ved hjælp af nøgleordet await .

Dette gør det muligt for programmet at udføre fil-I/O-handlinger uden at blokere hovedtråden, forbedre ydeevnen og svartid. Metoden Directory.CreateDirectory bruges til at oprette mappen, hvis den ikke findes, for at sikre, at filen kan skrives korrekt.

Resumé

I dette undermodul har du lært, hvordan du implementerer asynkrone filinput- og outputhandlinger i C#. Du har udforsket brugen af nøgleordene async og await til at oprette asynkrone metoder til læsning og skrivning af filer. Ved hjælp af disse teknikker kan du forbedre ydeevnen og reaktionsevnen for dine programmer, når du udfører fil-I/O-handlinger.

Nøglepunkter

  • Filinput- og outputhandlinger kan udføres synkront eller asynkront i C#.
  • Asynkron fil-I/O forbedrer programmets ydeevne og svartid.
  • Nøgleordene async og await bruges til at oprette asynkrone metoder til fil-I/O-handlinger.
  • Navneområderne System.IO og System.Text.Json indeholder klasser og metoder til asynkron udførelse af fil-I/O-handlinger.
  • Klassen File og JsonSerializer klassen bruges i det angivne eksempel til at demonstrere asynkrone fil-I/O-handlinger.