Ota käyttöön asynkroninen tiedostosyöte ja tuloste
Tiedostonsyöttö- ja tulostetoiminnot ovat välttämättömiä monille sovelluksille, joten ne voivat lukea tietoja kiintolevyllä olevista tiedostoista ja kirjoittaa niihin. C#:ssä tiedoston syöte ja tuloste (tiedosto I/O) voidaan suorittaa synkronisesti tai asynkronisesti. Asynkroninen tiedosto I/O on erityisen hyödyllinen sovelluksen suorituskyvyn ja reagoinnin parantamiseksi erityisesti tilanteissa, joissa tiedostotoiminnot voivat kestää huomattavan paljon aikaa, kuten suurten tiedostojen lukeminen tai tietojen kirjoittaminen kiintolevylle.
Asynkronisten menetelmien luominen tiedostojen lukemiseen ja kirjoittamiseen
- async ja await -avainsanojen avulla C#:ssä voit luoda asynkronisia menetelmiä, joilla voit suorittaa tiedosto-I/O-toimintoja estämättä pääketjua. Tästä on hyötyä erityisesti sovelluksissa, joiden käyttöliittymä on käyttöliittymä, jossa pääsäikeen estäminen voi johtaa jäädytettyyn tai vastaamattomaan käyttöliittymään. - System.IO ja System.Text.Json -nimitilat tarjoavat luokkia ja menetelmiä tiedoston I/O-toimintojen suorittamiseen asynkronisesti.
Esimerkiksi File nimitilan luokka System.IO tarjoaa menetelmiä tiedostojen lukemiseen ja kirjoittamiseen asynkronisesti. - File.ReadAllTextAsync menetelmä lukee tiedoston sisällön asynkronisesti, kun taas File.WriteAllTextAsync -menetelmä kirjoittaa tekstiä tiedostoon asynkronisesti. Nämä menetelmät palauttavat tai Task<string>Task edustaa asynkronista toimintoa, joten voit avainsanan avulla await odottaa niiden valmistumista estämättä kutsuvaa säiettä.
System.Text.Json Nimitilassa luokka tarjoaa asynkronisia JsonSerializer menetelmiä JSON-tietojen sarjoittamiseen ja sarjoittamiseen. - JsonSerializer.SerializeAsync menetelmä sarjoittaa objektin JSON-merkkijonoon asynkronisesti, kun taas JsonSerializer.DeserializeAsync -menetelmä sarjoittaa JSON-merkkijonon objektiin asynkronisesti. Nämä menetelmät palauttavat myös - Task arvon, joka edustaa asynkronista toimintoa.
Seuraava koodiesimerkki näyttää, miten voit luoda asynkronisia menetelmiä, jotka sarjoitavat C#-objektin, kirjoittavat JSON-merkkijonon tiedostoon, lukevat tiedoston sisällön merkkijonoon ja poistavat JSON-merkkijonon sarjoituksen takaisin C#-objektiin:
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);
}
}
Tässä esimerkissä SaveAccountDataAsync -menetelmä sarjoittaa objektin Account JSON-merkkijonoon ja kirjoittaa sen tiedostoon asynkronisesti. - LoadAccountDataAsync menetelmä lukee JSON-merkkijonon tiedostosta ja deserialisoi sen takaisin objektiin Account asynkronisesti. - Main menetelmä esittelee, miten voit kutsua näitä asynkronisia await menetelmiä avainsanan avulla.
Näin sovellus voi suorittaa tiedoston I/O-toimintoja estämättä pääketjua, mikä parantaa suorituskykyä ja vasteaikaa. - Directory.CreateDirectory menetelmän avulla luodaan hakemisto, jos sitä ei ole olemassa, ja varmistetaan, että tiedosto voidaan kirjoittaa onnistuneesti.
Yhteenveto
Tässä osiossa opit ottamaan käyttöön asynkronisia tiedostosyöte- ja tulostetoimintoja C#:ssä. Tutustuit -ja async -avainsanojen await käyttöön asynkronisten menetelmien luomisessa tiedostojen lukemiseen ja kirjoittamiseen. Näitä tekniikoita käyttämällä voit parantaa sovellustesi suorituskykyä ja reagointia suoritettaessa tiedoston I/O-toimintoja.
Avainkohdat
- Tiedoston syöte- ja tulostetoiminnot voidaan suorittaa synkronisesti tai asynkronisesti C#:ssä.
- Asynkroninen tiedosto I/O parantaa sovelluksen suorituskykyä ja vasteaikaa.
- -
asyncjaawait-avainsanoja käytetään asynkronisten menetelmien luomiseen tiedosto-I/O-toiminnoille. - -
System.IOjaSystem.Text.Json-nimitilat tarjoavat luokkia ja menetelmiä tiedoston I/O-toimintojen suorittamiseen asynkronisesti. - Luokkaa
Fileja luokkaaJsonSerializerkäytetään tässä esimerkissä asynkronisten tiedosto-I/O-toimintojen havainnollistamiseen.