Implementacja asynchronicznego wejścia i wyjścia pliku

Ukończone

Operacje wejścia i wyjścia plików są niezbędne dla wielu aplikacji, umożliwiając ich odczytywanie i zapisywanie na dysku twardym. W języku C# operacje wejścia i wyjścia na plikach (we/wy pliku) można wykonywać synchronicznie lub asynchronicznie. Asynchroniczne operacje we/wy plików są szczególnie przydatne w przypadku poprawy wydajności i reakcji aplikacji, szczególnie w scenariuszach, w których operacje na plikach mogą zająć dużo czasu, na przykład odczytywanie dużych plików lub zapisywanie danych na dysku twardym.

Tworzenie metod asynchronicznych do odczytywania i zapisywania plików

W języku C# słowa kluczowe async i await umożliwiają ci tworzenie metod asynchronicznych, które mogą wykonywać operacje we/wy plików bez blokowania głównego wątku. Jest to szczególnie przydatne w aplikacjach z interfejsem użytkownika, gdzie blokowanie głównego wątku może prowadzić do zamarznięcia lub nie odpowiadania interfejsu użytkownika. Przestrzenie nazw System.IO i System.Text.Json udostępniają klasy i metody do asynchronicznego wykonywania operacji we/wy na plikach.

Na przykład File klasa w System.IO przestrzeni nazw udostępnia metody odczytywania i zapisywania plików asynchronicznie. Metoda File.ReadAllTextAsync odczytuje zawartość pliku asynchronicznie, podczas gdy File.WriteAllTextAsync metoda zapisuje tekst w pliku asynchronicznie. Te metody zwracają Task<string> lub Task, które reprezentują operację asynchroniczną, umożliwiając użycie słowa kluczowego await do oczekiwania na ich ukończenie bez blokowania wątku wywołującego.

System.Text.Json W przestrzeni nazw JsonSerializer klasa udostępnia metody asynchroniczne do serializacji i deserializacji danych JSON. Metoda JsonSerializer.SerializeAsync serializuje obiekt w ciągu JSON asynchronicznie, podczas gdy JsonSerializer.DeserializeAsync metoda deserializuje ciąg JSON do obiektu asynchronicznie. Te metody zwracają również element reprezentujący operację Task asynchroniczną.

W poniższym przykładzie kodu pokazano, jak utworzyć metody asynchroniczne, które serializują obiekt C#, zapisują ciąg JSON do pliku, odczytują zawartość pliku w ciągu i deserializują ciąg JSON z powrotem do obiektu 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);
    }
}

W tym przykładzie metoda SaveAccountDataAsync serializuje obiekt Account do ciągu JSON i zapisuje go w pliku asynchronicznie. Metoda LoadAccountDataAsync odczytuje ciąg JSON z pliku i deserializuje go z powrotem do Account obiektu asynchronicznie. Metoda Main demonstruje sposób wywoływania tych metod asynchronicznych przy użyciu słowa kluczowego await .

Dzięki temu aplikacja może wykonywać operacje we/wy plików bez blokowania głównego wątku, zwiększając wydajność i czas odpowiedzi. Metoda Directory.CreateDirectory służy do tworzenia katalogu, jeśli nie istnieje, zapewniając pomyślne zapisanie pliku.

Podsumowanie

W tej lekcji przedstawiono sposób implementowania asynchronicznych operacji wejściowych i wyjściowych pliku w języku C#. Zbadałeś użycie słów kluczowych async i await do tworzenia metod asynchronicznych do odczytywania i zapisywania plików. Korzystając z tych technik, można zwiększyć wydajność i czas odpowiedzi aplikacji podczas wykonywania operacji we/wy plików.

Kwestie kluczowe

  • Operacje danych wejściowych i wyjściowych plików można wykonywać synchronicznie lub asynchronicznie w języku C#.
  • Asynchroniczne operacje we/wy pliku zwiększają wydajność i czas odpowiedzi aplikacji.
  • Słowa kluczowe async i await służą do tworzenia metod asynchronicznych dla operacji we/wy plików.
  • Przestrzenie nazw System.IO i System.Text.Json udostępniają klasy i metody do asynchronicznego wykonywania operacji we/wy na plikach.
  • Klasa File i klasa JsonSerializer są używane w podanym przykładzie w celu zademonstrowania asynchronicznych operacji we/wy plików.