Pada artikel terakhir, kami memperkenalkan proses asinkron dengan menceritakan kisah pembuatan sarapan. Pada artikel ini, saya akan mengimplementasikannya menggunakan C#. Selain itu, kita akan mendalami cara kerja sintaks async/await di C#.

Sebelum membaca artikel ini, pastikan Anda sudah menyelesaikan artikel saya sebelumnya.



Contoh Kode Membuat Sarapan

Di bawah ini adalah proses sinkron dalam membuat sarapan…

Sangat intuitif untuk mendapatkan hasil dalam 8 menit.

Mari kita lakukan versi asynchronous.

Seperti yang Anda lihat, kami hanya membutuhkan waktu 5 menit untuk menyelesaikan sarapan kami. BTW, harap perhatikan baik-baik kapan tugas itu dimulai dan selesai.

Penjelasan Kode

Seperti yang Anda lihat, ada banyak "menunggu" dalam kode asinkron kita. Bagaimana kita bisa menafsirkannya dengan cara yang mudah?

Menurut pengalaman saya, menunggu berarti dua hal bagi saya ketika membaca kode…

Pertama, Ketika program Anda memerlukan tugas terikat I/O, seperti memanggil API atau mengunduh file, dalam hal ini “menunggu” berarti program tersebut tidak akan memblokir thread dan menunggu hasilnya. Sebaliknya, ia akan melompat mundur dan melihat apakah ada pekerjaan lain yang harus dilakukan.

Kedua, "Menunggu" juga berarti bahwa fungsi tersebut menjamin Anda akan mendapatkan hasil atau menyelesaikan pekerjaan sebelum kita terus menjalankan kode di bawah sintaks menunggu.

Dan jangan khawatir tentang "async", itu hanya sebuah tanda untuk memberi tahu kompiler bahwa kita memiliki sintaks menunggu di dalam fungsi kita dan tipe pengembaliannya adalah Tugas.

Jadi bagaimana kita bisa membaca kode asinkron dengan menggerakkan jari kita?

Pada awalnya, cukup gerakkan jari Anda di Main() dari atas ke bawah hingga mencapai makeCoffeeTask = MakeCoffeeAsync(). Gerakkan jari Anda ke atas fungsi MakeCoffeeAsync dan mulailah bergerak ke bawah hingga Anda mencapai “menunggu”. Menurut pengalaman pertama saya, kita akan melompat kembali dan melihat pekerjaan lain, jadi kita akan mengeksekusi fryEgg() dan fryBacon(). Kedua fungsi ini tidak asinkron sehingga akan menahan sumber daya kita hingga selesai. Mari terus gerakkan jari kita ke toastBreadTask= toastBreadAsync(). Mirip dengan tugas kopi, kita gerakkan jari kita ke atas fungsi toastBreadAsync() dan mulai turun hingga kita mencapai "menunggu", sama seperti yang saya katakan sebelumnya, kita akan melompat kembali ke Main(). Kami terus berpindah ke "menunggu makeCoffeeTask". Jika kita menerapkan pengalaman pertama saya, itu akan menjadi aneh bukan? Tidak ada yang perlu dilompati sampai kita mendapatkan hasil kopi. Lebih baik menganggap situasi ini sebagai pengalaman kedua. Ini akan menjamin Anda mendapatkan hasil. Tapi itu tidak akan memblokir thread sambil menunggu hasilnya. Penjelasan yang sama di "menunggu toastBreadTask". Tentu saja, Anda sudah tahu apa yang akan terjadi ketika kita berpindah ke Combine().

Kesimpulan

Di C#, fungsi asinkron harus dijalankan sebagai Tugas. Ini akan dieksekusi saat tugas ditetapkan. Pemrogram memutuskan kapan kita membutuhkan hasil dari fungsi asinkron tersebut. Yang paling penting adalah kita harus tahu kapan saya harus mendapatkan hasil tugas agar kode saya tetap berjalan atau kode Anda akan berjalan seperti fungsi sinkron. Teruslah belajar dan teruslah mencoba. Anda akan terbiasa dengan sintaks ini.