Rumah > pembangunan bahagian belakang > C++ > Tunggu Tugasan. Jalankan lwn. Tunggu Async: Bilakah Anda Harus Pilih Yang Mana?

Tunggu Tugasan. Jalankan lwn. Tunggu Async: Bilakah Anda Harus Pilih Yang Mana?

Linda Hamilton
Lepaskan: 2025-01-22 18:36:13
asal
781 orang telah melayarinya

Await Task.Run vs. Await Async: When Should You Choose Which?

pengaturcaraan tak segerak .NET: Pilihan kaedah await Task.Run dan await Async

Dalam pengaturcaraan tak segerak .NET, penggunaan kaedah tak segerak await Task.Run dan await sering mengelirukan. Artikel ini akan menggambarkan perbezaan antara keduanya melalui senario konkrit dan memberikan pemahaman yang menyeluruh.

Adegan:

Pertimbangkan dua coretan kod berikut:

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

dan

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

di mana LongProcess ialah kaedah tak segerak, termasuk panggilan tak segerak, seperti await ExecuteReaderAsync().

Jawapan:

Dalam senario khusus ini, tiada perbezaan yang ketara antara kedua-dua kaedah. Kedua-duanya menggunakan kata kunci await untuk mengembalikan kawalan kepada pemanggil sebelum operasi tak segerak dalam LongProcess selesai.

Sifat pelaksanaan tak segerak

Bertentangan dengan kepercayaan popular, kod tak segerak tidak dilaksanakan pada berbilang urutan. Sebaliknya, ia dilaksanakan pada benang, menggunakan teknik yang dipanggil "penukaran konteks."

Apabila fungsi tak segerak memanggil fungsi tak segerak yang lain, urutan semasa menangguhkan pelaksanaan pemanggil buat sementara waktu dan meneruskan pelaksanaan penerima. Sistem pengendalian kemudian memberikan benang yang digantung kepada tugas lain yang tersedia.

Walau bagaimanapun, sebaik sahaja pernyataan await ditemui dalam penerima, urutan semasa kembali kepada pemanggil, dengan berkesan menyambung semula pelaksanaan pemanggil.

LangsungawaitKelebihan kaedah tak segerak

Dalam senario yang diberikan, memandangkan LongProcess sudah menjadi kaedah tak segerak, tidak perlu membungkusnya secara eksplisit await sebelum Task.Runnya. Kaedah tak segerak await langsung membenarkan urutan mula melaksanakan tugas lain dengan segera sementara menunggu LongProcess selesai.

Task.Run senario penggunaan

Task.Run mempunyai kes penggunaan khusus, contohnya:

  • Mulakan tugas baharu tanpa menunggunya, membenarkan pelaksanaan tanpa menyekat operasi yang memakan masa.
  • Jalankan operasi yang berpotensi intensif CPU pada urutan latar belakang, membebaskan urutan UI untuk interaksi pengguna yang responsif.

Ringkasan

Dalam senario yang diberikan, kedua-dua kaedah adalah setara dari segi fungsi. Walau bagaimanapun, pendekatan langsung await tak segerak adalah lebih baik kerana ia mengurangkan penukaran benang dan membolehkan penggunaan kumpulan benang yang lebih cekap.

Atas ialah kandungan terperinci Tunggu Tugasan. Jalankan lwn. Tunggu Async: Bilakah Anda Harus Pilih Yang Mana?. 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