Menerapkan input dan output file asinkron

Selesai

Operasi input dan output file sangat penting untuk banyak aplikasi, memungkinkan mereka membaca dari dan menulis ke file di hard drive. Dalam C#, input dan output file (file I/O) dapat dilakukan secara sinkron atau asinkron. I/O file asinkron sangat berguna untuk meningkatkan performa dan responsivitas aplikasi, terutama dalam skenario di mana operasi file mungkin membutuhkan waktu yang signifikan, seperti membaca file besar atau menulis data ke hard drive.

Membuat metode asinkron untuk membaca dan menulis file

Kata async kunci dan await dalam C# memungkinkan Anda membuat metode asinkron yang dapat melakukan operasi I/O file tanpa memblokir utas utama. Ini sangat berguna dalam aplikasi dengan antarmuka pengguna, di mana memblokir utas utama dapat menyebabkan UI yang beku atau tidak responsif. Namespace System.IO dan System.Text.Json menyediakan kelas dan metode untuk melakukan operasi I/O file secara asinkron.

Misalnya, File kelas di System.IO namespace menyediakan metode untuk membaca dan menulis file secara asinkron. Metode ini File.ReadAllTextAsync membaca konten file secara asinkron, sementara File.WriteAllTextAsync metode menulis teks ke file secara asinkron. Metode ini mengembalikan Task<string> atau Task yang mewakili operasi asinkron, memungkinkan Anda menggunakan await kata kunci untuk menunggu penyelesaiannya tanpa memblokir utas panggilan.

Pada namespace System.Text.Json, kelas JsonSerializer menyediakan metode asinkron untuk serialisasi dan deserialisasi data JSON. Metode ini JsonSerializer.SerializeAsync menserialisasikan objek ke string JSON secara asinkron, sementara JsonSerializer.DeserializeAsync metode mendeserialisasi string JSON ke objek secara asinkron. Metode ini juga mengembalikan Task yang mewakili operasi asinkron.

Sampel kode berikut menunjukkan cara membuat metode asinkron yang menserialisasikan objek C#, menulis string JSON ke file, membaca konten file ke dalam string, dan mendeserialisasi string JSON kembali ke objek 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);
    }
}

Dalam contoh ini, SaveAccountDataAsync metode menserialisasikan Account objek ke string JSON dan menulisnya ke file secara asinkron. Metode membaca LoadAccountDataAsync string JSON dari file dan mendeserialisasinya kembali ke objek Account secara asinkron. Metode Main menunjukkan cara memanggil metode asinkron ini menggunakan kata kunci await.

Ini memungkinkan aplikasi untuk melakukan operasi I/O file tanpa memblokir utas utama, meningkatkan performa dan responsivitas. Metode Directory.CreateDirectory ini digunakan untuk membuat direktori jika tidak ada, memastikan bahwa file dapat berhasil ditulis.

Ringkasan

Dalam unit ini, Anda mempelajari cara menerapkan operasi input dan output file asinkron di C#. Anda menjelajahi penggunaan kata kunci async dan await untuk membuat metode asinkron guna membaca dan menulis file. Dengan menggunakan teknik ini, Anda dapat meningkatkan performa dan respons aplikasi Anda saat melakukan operasi I/O file.

Poin-poin penting

  • Operasi input dan output file dapat dilakukan secara sinkron atau asinkron di C#.
  • I/O file asinkron meningkatkan performa dan responsivitas aplikasi.
  • Kata kunci async dan await digunakan untuk membuat metode asinkron pada operasi I/O file.
  • Namespace System.IO dan System.Text.Json menyediakan kelas dan metode untuk melakukan operasi I/O file secara asinkron.
  • Kelas File dan JsonSerializer kelas digunakan dalam contoh yang disediakan untuk menunjukkan operasi I/O file asinkron.