Rumah >pembangunan bahagian belakang >C++ >Api dan Lupakan lwn. Menunggu dalam Async/Await: Apakah Perbezaannya dan Bilakah Anda Perlu Menggunakan Setiap?
Aktifkan dan Lupakan dan Menunggu dalam Async/Await: Perbezaan dan senario penggunaan
Kod berikut menunjukkan cara yang berbeza untuk memanggil kaedah Callee
dan perbezaan tingkah laku mereka.
Panggilan #1: Api dan Lupakan (Mudah)
Callee
Kaedah ini dipanggil secara tak segerak dan tidak menyekat pemanggil.
Panggilan #2: Menunggu tugas (kelewatan)
KaedahCallee
menggunakan kata kunci await
dan pemanggil menunggu sehingga selesai. Memandangkan kaedah Callee
mengandungi kelewatan 1000ms, ia akan mengambil masa lebih daripada satu saat untuk pemanggil.
Panggilan #3 & #5: Tugas. Jalankan(Tembak dan Lupakan)
Task.Run
Menyerahkan kaedah Callee
ke kumpulan benang untuk dilaksanakan. Memandangkan await
tidak digunakan, kedua-dua panggilan adalah Fire dan Forget dan jangan sekat pemanggil.
Panggil #4 & #6: Tugas. Jalankan(Tunggu tugasan)
Serupa dengan #3 dan #5, tetapi Task.Run
menggunakan await
secara dalaman. Ini menjadikan mereka bersamaan dengan #2, pemanggil akan menunggu tugasan selesai.
Perbezaan antara #3 dan #5
Walaupun #3 dan #5 kedua-duanya menggunakan Task.Run
, terdapat perbezaan yang ketara. Dalam #3, Callee
dipanggil terus untuk membuat tugasan baharu pada kumpulan benang. Dalam #5, Callee
dibalut dengan ungkapan lambda async, yang mencipta tugasan baharu dengan mesin keadaannya sendiri. Walau bagaimanapun, memandangkan kedua-dua misi adalah Fire dan Forget, perbezaannya tidak ketara dalam kes ini.
Nota mengenai Fabrik Servis
Selepas berhijrah ke Fabrik Perkhidmatan, HostingEnvironment.QueueBackgroundWorkItem
tidak lagi disokong. Walaupun boleh menggunakan Task.Run
sebagai alternatif, adalah lebih baik untuk menggunakan proses latar belakang yang berasingan dan berkomunikasi dengannya melalui baris gilir. Ini memastikan pengasingan antara perkhidmatan bahagian hadapan dan bahagian belakang, mengelakkan masalah prestasi atau kebuntuan.
Atas ialah kandungan terperinci Api dan Lupakan lwn. Menunggu dalam Async/Await: Apakah Perbezaannya dan Bilakah Anda Perlu Menggunakan Setiap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!