Mulai menggunakan pemrograman asinkron

Selesai

Pengembang menggunakan teknik pemrograman asinkron untuk menghindari penyempitan performa dan meningkatkan responsivitas keseluruhan aplikasi mereka. Namun, teknik tradisional untuk menulis aplikasi asinkron bisa rumit, membuatnya sulit ditulis, di-debug, dan dipertahankan.

C# mendukung pendekatan pemrograman asinkron yang disederhanakan yang memanfaatkan dukungan asinkron dalam runtime .NET. Pengompilasi melakukan pekerjaan sulit yang biasa dilakukan pengembang, dan aplikasi Anda mempertahankan struktur logis yang menyerupai kode sinkron. Akibatnya, Anda mendapatkan semua keuntungan dari pemrograman asinkron dengan sebagian kecil dari upaya.

Memahami cara kerja proses asinkron di dunia nyata dapat membantu Anda memahami cara menggunakan pemrograman asinkron di aplikasi Anda.

Memeriksa proses asinkron di dunia nyata

Membuat sarapan adalah contoh yang baik dari proses yang mendapat manfaat dari melakukan tugas secara asinkron. Anda dapat menganggap menjadikan sarapan sebagai serangkaian tugas yang dapat dilakukan baik secara sinkron atau asinkron.

  1. Dapatkan bahan-bahan sarapan dari dapur.
  2. Tuangkan secangkir kopi.
  3. Panaskan wajan, lalu goreng tiga irisan bacon.
  4. Goreng dua telur.
  5. Panggang dua potong roti.
  6. Sebarkan mentega dan selai di roti panggang.
  7. Tuangkan segelas jus jeruk.

Jika Anda memiliki pengalaman memasak, Anda mungkin menyelesaikan instruksi ini secara asinkron. Anda mulai menyiapkan wajan panas untuk bacon dan telur, lalu mengambil bahan-bahan dari lemari penyimpanan. Anda menaruh roti di pemanggang roti, lalu mulai memasak daging. Pada setiap langkah proses, Anda memulai tugas, lalu beralih ke tugas lain yang siap untuk anda perhatikan.

Memasak sarapan adalah contoh yang baik dari pekerjaan asinkron yang tidak paralel. Satu orang (atau utas) dapat menangani semua tugas. Satu orang dapat membuat sarapan secara asinkron dengan memulai tugas berikutnya sebelum tugas sebelumnya selesai. Setiap tugas memasak berlangsung terlepas dari apakah seseorang secara aktif menonton prosesnya. Segera setelah Anda mulai menghangatkan waduk, Anda bisa mendapatkan bahan-bahan dari dapur. Setelah bacon mulai dimasak, Anda dapat meletakkan roti di pemanggang.

Untuk algoritma paralel, Anda memerlukan beberapa orang yang memasak (atau beberapa thread). Satu orang memasak telur, yang lain menggoreng daging, dan sebagainya. Setiap orang berfokus pada satu tugas tertentu. Setiap orang yang memasak (atau setiap utas) terhalang secara sinkron saat menunggu tugas saat ini selesai: Bacon siap dibalik, roti siap muncul dari pemanggang, dan sebagainya.

Dengan menggunakan teknik pemrograman asinkron, Anda dapat meningkatkan efisiensi dan responsivitas aplikasi Anda, sama seperti bagaimana Anda dapat membuat sarapan lebih efisien dengan melakukan beberapa tugas sekaligus.

Asinkron meningkatkan responsivitas

Asinkron sangat penting untuk aktivitas yang berpotensi memblokir, seperti akses web. Akses ke sumber daya web terkadang lambat atau tertunda. Jika aktivitas seperti itu diblokir dalam proses sinkron, seluruh aplikasi harus menunggu. Dalam proses asinkron, aplikasi dapat dilanjutkan dengan pekerjaan lain yang tidak bergantung pada sumber daya web sampai tugas yang berpotensi memblokir selesai.

Tabel berikut menunjukkan area umum di mana pemrograman asinkron meningkatkan responsivitas. API yang tercantum dari .NET dan Windows Runtime berisi metode yang mendukung pemrograman asinkron.

Area Aplikasi Jenis .NET dengan Metode Asinkron Jenis Runtime Windows dengan Metode Asinkron
Akses web HttpClient Windows.Web.Http.HttpClient, SyndicationClient
Bekerja dengan berkas JsonSerializer, StreamReader, StreamWriter, dll. StorageFile
Bekerja dengan gambar MediaCapture, BitmapEncoder, BitmapDecoder
Pemrograman WCF Operasi Sinkron dan Asinkron

Cara membuat dan memanggil metode asinkron

Dalam C#, operasi asinkron diimplementasikan menggunakan kata kunci async dan await. Kata async kunci digunakan untuk menentukan metode asinkron, sementara await kata kunci digunakan untuk memanggil metode asinkron dan menunggu hasilnya tanpa memblokir utas panggilan. Operasi asinkron biasanya diimplementasikan menggunakan tipe Task atau Task<T>, yang mewakili operasi berkelanjutan yang dapat ditunggu.

Berikut adalah contoh cara membuat dan memanggil tugas asinkron di C#:


using System;
using System.IO;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        string filePath = "example.txt";
        string content = await ReadFileAsync(filePath);
        Console.WriteLine(content);
    }

    public static async Task<string> ReadFileAsync(string filePath)
    {
        using (StreamReader reader = new StreamReader(filePath))
        {
            string content = await reader.ReadToEndAsync();
            return content;
        }
    }
}

Dalam contoh ini, metode ReadFileAsync didefinisikan menggunakan kata kunci async dan memiliki jenis pengembalian Task<string>. Kata async kunci menunjukkan bahwa metode berisi operasi asinkron, dan jenis Task<string> pengembalian menunjukkan bahwa metode mengembalikan tugas yang mewakili operasi asinkron. Jenisnya Task<string> adalah tugas generik yang mewakili operasi asinkron yang mengembalikan nilai string. Metode ini ReadFileAsync mengambil jalur file sebagai parameter dan membaca konten file secara asinkron.

Metode Main ini juga didefinisikan sebagai asinkron, memungkinkannya untuk memanggil ReadFileAsync metode menggunakan await kata kunci. Kata await kunci digunakan untuk menunjukkan bahwa program harus menunggu hasil operasi asinkron sebelum melanjutkan. Dalam hal ini, program menunggu file dibaca sebelum mencetak isinya ke konsol.

Ringkasan

Dalam unit ini, Anda belajar tentang manfaat pemrograman asinkron dan bagaimana hal itu dapat meningkatkan responsivitas aplikasi Anda. Anda juga mempelajari cara membuat dan memanggil metode asinkron menggunakan async kata kunci dan await di C#. Dengan menggunakan teknik ini, Anda dapat menulis aplikasi yang lebih efisien dan responsif yang dapat menangani operasi yang berpotensi memblokir tanpa membekukan antarmuka pengguna atau memblokir tugas lain.

Poin-poin penting

  • Pemrograman asinkron meningkatkan performa dan responsivitas aplikasi.
  • C# menyediakan pendekatan yang disederhanakan untuk pemrograman asinkron.
  • Pemrograman asinkron bermanfaat dalam aktivitas yang berpotensi memblokir seperti akses web.
  • Di C#, metode asinkron dibuat menggunakan async kata kunci dan dipanggil menggunakan await kata kunci.
  • Jenis Task atau Task<T> mewakili operasi berkelanjutan yang dapat ditunggu di C#.