Rumah >pembangunan bahagian belakang >C++ >Async Fire-and-Forget: Async Void, Task.Run(), atau 'Old Async Delegate'?
Asynchronous "start and ignore": Async Void, Task.Run() atau kaedah lain
Dalam dunia pengaturcaraan tak segerak, corak "mulakan dan lupakan" selalunya digunakan untuk melaksanakan tugasan tanpa menyekat. Secara tradisinya, pendekatan "wakil async lama" menggunakan kaedah BeginInvoke dan EndInvoke untuk mencapai matlamat ini. Walau bagaimanapun, dengan pengenalan async/waiit datang sintaks baharu yang menjanjikan untuk menjadi lebih ringkas dan berpotensi meningkatkan prestasi.
Sintaks tak segerak baharu: Async Void atau Task.Run()?
"Kaedah baharu" menggunakan async void menghapuskan keperluan untuk pemprosesan panggilan yang jelas, tetapi ia memerlukan setiap kaedah asynchronous mengandungi pernyataan menunggu, yang boleh menjadi masalah apabila memproses kaedah segerak sedia ada yang perlu difaktorkan semula kepada pelaksanaan asynchronous menjadi menyusahkan .
Alternatifnya ialah menggunakan Task.Run(). Dengan membungkus kaedah yang disegerakkan dalam panggilan Task.Run, kami boleh melaksanakannya secara tak segerak tanpa mengubah suai kaedah asal:
<code>Task.Run(() => DoIt("Test2"));</code>
Pertimbangan prestasi dan pengendalian ralat
Async/wait secara amnya berprestasi lebih baik daripada kaedah perwakilan lama kerana ia menggunakan mekanisme berasaskan acara yang lebih cekap. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa ralat pengendalian semantik kaedah async void adalah lebih rumit. Pengecualian yang dilemparkan dalam kaedah async void tidak disebarkan kepada pemanggil, yang boleh menyebabkan ranap tidak terurus.
Panggilan tak segerak bagi kaedah segerak
Untuk memanggil kaedah segerak A() secara tak segerak menggunakan async/menunggu dan mengelakkan kerumitan kaedah lama, kita boleh menggunakan kaedah pembalut:
<code>async Task InvokeAsync(Action action) { await Task.Yield(); action(); } InvokeAsync(DoIt);</code>
Ringkasan
Pastikan anda mempertimbangkan pertukaran apabila memilih antara sintaks perwakilan async lama dan kaedah async void/Task.Run baharu. Jika pengendalian ralat adalah isu utama, elakkan menggunakan async void dan pilih Task.Run. Jika kesederhanaan adalah penting, kaedah perwakilan tak segerak lama mungkin masih sesuai, tetapi Task.Run boleh memberikan alternatif yang mudah dan cekap. Akhirnya, pendekatan terbaik akan bergantung pada keperluan khusus dan kekangan aplikasi.
Atas ialah kandungan terperinci Async Fire-and-Forget: Async Void, Task.Run(), atau 'Old Async Delegate'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!