Implementace asynchronního vstupu a výstupu souboru
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á
asyncslova aawaitklíčová slova slouží k vytvoření asynchronních metod pro vstupně-výstupní operace souborů. -
System.IOaSystem.Text.Jsonobory názvů poskytují třídy a metody pro asynchronní provádění souborových I/O operací. - Třída
Filea třídaJsonSerializerse používají v poskytnutém příkladu k demonstraci asynchronních vstupně-výstupních operací se soubory.