Bagaimana saya memahami kode asinkron?

Halo, Habr! Untuk perhatian Anda, saya persembahkan terjemahan (dengan sedikit koreksi) dari artikel "Bagaimana Saya Berpikir Tentang Kode Async ?!" oleh Leslie Richardson.



Kode asinkron menjadi semakin populer untuk menulis aplikasi responsif. Sayangnya, pemrograman asynchronous juga menimbulkan kesulitan tambahan. Akibatnya, memahami cara kerja kode semacam itu bisa menjadi tugas yang menakutkan, terlepas dari pengalaman Anda. Jika Anda baru saja memulai dengan kode asinkron, atau ingin memoles pemahaman Anda, ini adalah pengantar dunia pemrograman asinkron!



Apa itu Kode Asinkron?



Pemrograman asinkron memungkinkan Anda mengeksekusi blok kode tanpa menghentikan (atau memblokir) seluruh utas tempat tindakan dilakukan. Mitos umum tentang kode asinkron adalah kode ini meningkatkan kinerja, yang tidak selalu benar. Sebaliknya, fitur utama pemrograman asynchronous adalah meningkatkan jumlah tugas (bandwidth) yang dapat dilakukan secara bersamaan, tanpa harus memblokir utas tempat tindakan ini dilakukan.



Anda mungkin berpikir bahwa kode asinkron sangat mirip dengan kode multi-utas, lagipula, banyak metode dapat dieksekusi secara bersamaan dalam kedua kasus. Faktanya, pemrograman asynchronous dapat digunakan dengan aplikasi single-threaded dan multi-threaded. Ini berarti Anda dapat memiliki program asinkron single-threaded di mana satu thread dapat menjalankan tugas paralel. Sebaliknya, Anda juga dapat memiliki aplikasi asinkron multi-utas tempat beberapa utas dapat menjalankan beberapa tugas paralel.



Mengapa saya harus menggunakan kode asinkron? Tolong contoh!



Untuk memiliki beberapa analogi dalam mendemonstrasikan pemrograman asinkron, pertimbangkan proses memanggang pai. Proses ini akan diwakili oleh utas yang melakukan beberapa langkah (atau tugas), seperti yang ditunjukkan pada kode di bawah ini. Kode ini benar dan Anda masih akan mendapatkan kue yang lezat setelah menjalankan metode ini. Namun, karena semua kode sinkron, setiap baris akan dijalankan secara berurutan. Dengan kata lain, Anda akan berdiri diam sambil menunggu oven selesai dipanaskan. Tetapi pada saat yang sama, Anda bisa membuat adonan untuk pai Anda!



Metode Synchronous MakeCake ()



gambar



Program pembuatan kue sinkron



gambar



Dalam kehidupan nyata, Anda cenderung membagi proses ini menjadi beberapa tugas, menguleni adonan saat oven sedang memanas. Atau buatlah lapisan gula saat pai dipanggang di dalam oven. Ini meningkatkan produktivitas Anda dan memungkinkan Anda memanggang kue lebih cepat. Di sinilah kode asinkron berguna! Dengan membuat kode kita saat ini asynchronous, kita dapat melakukan hal-hal lain untuk mengisi waktu sambil menunggu hasil dari suatu tugas , seperti memanggang pai di dalam oven.

Untuk melakukan ini, kami akan mengubah kode kami, serta menambahkan metode PassTheTime . Sekarang kode kita menyimpan status tugas, memulai operasi sinkron atau asinkron lainnya, dan mendapatkan hasil tugas yang disimpan saat diperlukan.



Metode Asynchronous MakeCake ()

gambar



Program Asynchronous Pie Baking Program

gambar



Dibandingkan dengan metode MakeCake sinkron , yang tidak memiliki metode PassTheTime , metode Asynchronous MakeCakeAsync dapat menyelesaikan lebih banyak tugas tanpa memblokir utas, yang mengurangi waktu yang dibutuhkan untuk menyelesaikan seluruh metode.



Perbandingan program asinkron dan sinkron



gambar



Bagaimana cara menulis kode asinkron di .NET?



C # memungkinkan Anda untuk menulis kode asinkron menggunakan jenis Tugas dan kata kunci await dan async . Jenis Tugas memberi tahu pemanggil tentang kemungkinan jenis pengembalian. Ini juga menunjukkan bahwa tindakan lain dapat terus dilakukan dalam metode panggilan. Kata kunci async dipasangkan dengan kata kunci await , yang memberi tahu compiler bahwa kita memerlukan nilai kembalian dari metode, tetapi tidak segera. Akibatnya, kami tidak perlu memblokir thread pemanggil, dan kami dapat terus melakukan tugas lain hingga nilai yang diharapkan diperlukan. Awalnya metode asynchronous akan dijalankan secara sinkron hingga kata kunci await ditemukan... Ini adalah saat yang tepat ketika eksekusi metode akan dimulai secara asinkron.



Saya belajar tentang kode asinkron! Sekarang apa?



Meskipun aplikasi memanggang kue asinkron sangat bagus, ada banyak aplikasi dunia nyata lainnya yang juga menggunakan kode asinkron. Dua contoh paling umum adalah:



Aplikasi yang menggunakan permintaan HTTP - Bergantung pada permintaan, panggilan HTTP dapat membutuhkan waktu lama untuk diproses. Menggunakan kode asynchronous memungkinkan kita untuk melakukan operasi lain sambil menunggu respon dari server.



Contoh Permintaan HTTP GET



gambar



Aplikasi UI - Aplikasi WPF atau lainnya yang menggunakan tombol, kotak teks, dan sumber daya UX lainnya juga bagus untuk implementasi asinkron. Misalnya, aplikasi WPF yang mengurai file. Prosedur ini mungkin membutuhkan waktu. Namun, dengan menjadikan tindakan ini asinkron, Anda masih dapat berinteraksi dengan antarmuka pengguna tanpa menghentikan aplikasi sepenuhnya sambil menunggu operasi selesai.



All Articles