Implementacja asynchronicznego wejścia i wyjścia pliku
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
asynciawaitsłużą do tworzenia metod asynchronicznych dla operacji we/wy plików. - Przestrzenie nazw
System.IOiSystem.Text.Jsonudostępniają klasy i metody do asynchronicznego wykonywania operacji we/wy na plikach. - Klasa
Filei klasaJsonSerializersą używane w podanym przykładzie w celu zademonstrowania asynchronicznych operacji we/wy plików.