Rumah >pembangunan bahagian belakang >C++ >Tunggu Tugasan.Lari vs. Tunggu: Bilakah Anda Harus Menggunakan Yang Mana?
await Task.Run
dan await
Penggunaan await Task.Run
dan await
sering mengelirukan dalam senario tak segerak, terutamanya apabila berurusan dengan kaedah yang mengandungi operasi tak segerak (seperti panggilan pangkalan data). Mari analisa perbezaan antara kedua-dua kaedah ini dalam senario tertentu.
Pertimbangkan coretan kod berikut:
<code class="language-csharp">await Task.Run(() => LongProcess());</code>
dan
<code class="language-csharp">await LongProcess();</code>
di mana LongProcess
ialah kaedah tak segerak yang membuat berbilang panggilan tak segerak, seperti await ExecuteReaderAsync()
.
Perbezaan utama antara kedua-dua kaedah ini ialah mekanisme asas kaedah pemprosesan.
await Task.Run(() => LongProcess())
: Sintaks ini mewakilkan pelaksanaan kaedah LongProcess
kepada urutan lain di luar kumpulan utas semasa. Ini membenarkan utas semasa untuk terus melaksanakan kod lain manakala kaedah LongProcess
berjalan secara tidak segerak pada utas lain. await LongProcess()
: Dalam kes ini, pelaksanaan kaedah LongProcess
tidak diwakilkan kepada urutan lain. Sebaliknya, utas semasa menangguhkan pelaksanaannya sehingga kaedah LongProcess
menyelesaikan operasi tak segeraknya. Pilihan antara dua kaedah ini bergantung pada gelagat masa jalan yang diingini dan penggunaan sumber.
Task.Run
adalah lebih sesuai jika matlamat anda adalah untuk memuatkan tugas pemprosesan yang berat ke urutan lain untuk mengelakkan daripada menyekat urutan semasa dan membolehkannya mengendalikan permintaan lain. Walau bagaimanapun, pendekatan ini menimbulkan overhed tambahan disebabkan oleh penciptaan benang dan penukaran konteks. await
jika kebimbangan utama anda adalah untuk meminimumkan penggunaan sumber dan memastikan bahawa urutan semasa tersedia untuk membalas input pengguna. Walau bagaimanapun, pendekatan ini boleh menyebabkan urutan semasa disekat sementara menunggu operasi tak segerak dalam LongProcess
selesai. await Task.Run
dan await
terletak pada mekanisme pengurusan urutan asas. await Task.Run
Mencipta urutan baharu untuk kaedah tak segerak, manakala await
menggantung urutan semasa. Kaedah yang sesuai harus dipilih berdasarkan tingkah laku operasi yang dikehendaki dan penggunaan sumber.
Atas ialah kandungan terperinci Tunggu Tugasan.Lari vs. Tunggu: Bilakah Anda Harus Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!