Operasi berkas adalah pekerjaan yang menunggu: disk membutuhkan waktu untuk mencari, membaca, dan menulis data, dan waktu itu jauh lebih lambat daripada eksekusi CPU. Memakai versi sinkron berarti satu thread tersita selama operasi berkas berlangsung. .NET menyediakan pasangan asinkron untuk hampir semua API File, seperti File.WriteAllTextAsync dan File.ReadAllTextAsync, sehingga thread dibebaskan selama disk bekerja. Untuk pengantar versi sinkron baca-tulis berkas, rujuk section File System dan Streams.
Dua Tingkat API Asinkron #
File.WriteAllTextAsyncdanFile.ReadAllTextAsync: satu panggilan untuk satu berkas utuh; pilihan tepat untuk berkas berukuran sedang.FileStreamdenganuseAsync: true: kontrol penuh atas posisi dan ukuran chunk; dipakai untuk berkas besar atau pembacaan bertahap. Versi pengantarFileStreamtersedia di section File System dan Streams.
Kedua tingkat tetap menerima CancellationToken, sehingga pembatalan dari bab Cancellation Token berlaku juga di sini.
Contoh: Menyimpan dan Membaca Laporan Penjualan #
Kode berikut menulis laporan ke berkas sementara, membacanya kembali secara asinkron, lalu menghapusnya:
string jalur = Path.Combine(Path.GetTempPath(), "laporan-penjualan-6e.txt");
string isi = "Laporan Penjualan Toko\nKopi Gayo, 12\nTeh Melati, 8";
await File.WriteAllTextAsync(jalur, isi);
string hasil = await File.ReadAllTextAsync(jalur);
Console.WriteLine($"Jumlah karakter terbaca: {hasil.Length}");
Console.WriteLine(hasil);
File.Delete(jalur);Output yang Dihasilkan:
Jumlah karakter terbaca: 50
Laporan Penjualan Toko
Kopi Gayo, 12
Teh Melati, 8Mari kita bedah baris-barisnya:
Path.Combine(Path.GetTempPath(), ...): berkas laporan ditempatkan di folder sementara milik sistem operasi agar pembersihannya mudah.await File.WriteAllTextAsync(jalur, isi): seluruh teks ditulis secara asinkron; thread dibebaskan selama disk bekerja, dan method kembali setelah penulisan tuntas.await File.ReadAllTextAsync(jalur): pembacaan membuka, membaca, lalu menutup berkas dalam satu panggilan; hasilnya satu string utuh sepanjang 50 karakter.File.Delete(jalur): pembersihan berkas disengaja memakai versi sinkron karena operasinya nyaris instan dan program segera berakhir.
Pekerjaan berkas sudah asinkron. Bab berikutnya mengambil langkah yang sama untuk jaringan: memanggil API HTTP tanpa menahan thread.