Rumah >pembangunan bahagian belakang >C++ >Async/Await: Patutkah saya Balut Kaedah Saya dalam `Task.Run` untuk Threading Latar Belakang?
Dalam usaha memahami async/wait, dilema timbul: Adakah perlu untuk merangkum kaedah dalam Tugas. Jalankan untuk mencapai kedua-dua gelagat async dan pelaksanaan urutan latar belakang?
"Async" menandakan kaedah yang boleh menghasilkan kawalan kepada urutan panggilan sebelum memulakan pelaksanaan. Hasil ini berlaku melalui ekspresi menunggu. Sebaliknya, "tak segerak" seperti yang ditakrifkan oleh MSDN (istilah yang sering mengelirukan) merujuk kepada kod yang dijalankan pada urutan yang berasingan.
Secara berasingan, "boleh ditunggu" menerangkan jenis yang boleh digunakan dengan pengendali menunggu. Perkara biasa yang boleh ditunggu termasuk Tugas dan Tugas
Untuk melaksanakan kaedah pada urutan latar belakang sambil mengekalkan kebolehtungguan, gunakan Tugasan. Jalankan:
private Task<int> DoWorkAsync() { return Task.Run(() => 1 + 2); }
Walau bagaimanapun, pendekatan ini secara amnya tidak digalakkan.
Untuk mencipta kaedah async yang boleh menjeda dan menghasilkan kawalan, isytiharkan kaedah sebagai async dan gunakan tunggu di titik hasil yang ditetapkan:
private async Task<int> GetWebPageHtmlSizeAsync() { var html = await client.GetAsync("http://www.example.com/"); return html.Length; }
Async code bergantung pada yang boleh ditunggu dalam ekspresi menunggunya. Awaitables boleh jadi sama ada kaedah async lain atau kaedah segerak yang mengembalikan awaitables.
Elakkan membalut kaedah segerak secara sembarangan dalam Task.Run. Sebaliknya, kekalkan tandatangan segerak, meninggalkan pilihan untuk membalut kepada pengguna.
Atas ialah kandungan terperinci Async/Await: Patutkah saya Balut Kaedah Saya dalam `Task.Run` untuk Threading Latar Belakang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!