Rumah > pembangunan bahagian belakang > C++ > Bilakah Anda Harus Menggunakan `await Task.Run` dalam Kaedah Async?

Bilakah Anda Harus Menggunakan `await Task.Run` dalam Kaedah Async?

Patricia Arquette
Lepaskan: 2025-01-22 18:17:09
asal
257 orang telah melayarinya

When Should You Use `await Task.Run` in Async Methods?

await Task.Run dalam Kaedah Async: Perlu atau Tidak?

Penggunaan await Task.Run dalam kaedah async sering menyebabkan kekeliruan. Mari kita jelaskan perkara ini dengan contoh:

<code class="language-csharp">await Task.Run(() => LongProcess());</code>
Salin selepas log masuk

berbanding dengan:

<code class="language-csharp">await LongProcess();</code>
Salin selepas log masuk

di mana LongProcess ialah kaedah tak segerak yang mengandungi berbilang panggilan tak segerak (mis., DbDataReader.ExecuteReaderAsync()).

Perbezaan Utama:

Dalam kes ini, await Task.Run adalah berlebihan. Ia memperkenalkan tugas tambahan yang tidak perlu dalam kaedah yang sudah tidak segerak. Kaedah Async sudah memanfaatkan konkurensi melalui kumpulan benang. Menambah Task.Run menghasilkan overhed yang tidak perlu.

Penjelasan:

Async/menunggu memudahkan pelaksanaan kod tanpa sekatan. Benang terus memproses tugas lain sementara menunggu penyempurnaan operasi tak segerak. Apabila kaedah async dipanggil, urutan tidak disekat; kata kunci await membenarkan urutan untuk menyambung semula pelaksanaan sebaik sahaja operasi selesai.

Pertimbangan Penting:

  • Benang Tunggal (Kebanyakannya): Bertentangan dengan kepercayaan popular, async/menunggu tidak semestinya menggunakan berbilang urutan. Urutan dijeda pada await dan disambung semula apabila tugasan yang ditunggu selesai. Walaupun penukaran konteks mungkin melibatkan benang yang berbeza di bawah hud, aliran logik sebahagian besarnya kekal satu benang.
  • Operasi Terikat CPU: Untuk tugasan intensif pengiraan, Task.Run adalah bermanfaat. Memunggah pengiraan ke urutan latar belakang menghalang urutan UI utama, memastikan tindak balas.

Kesimpulan:

Untuk senario yang dibentangkan, menggunakan terus await LongProcess() ialah pendekatan yang optimum dan lebih cekap. Kaedah Async sememangnya mengendalikan konkurensi; menambah Task.Run tidak memberi faedah dan menambah kerumitan.

Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan `await Task.Run` dalam Kaedah Async?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan