Rumah >pembangunan bahagian belakang >C++ >Menunggu lwn. Keputusan: Bilakah Anda Harus Menggunakan `menunggu` Daripada `.Result` dalam Tugasan Async C#?

Menunggu lwn. Keputusan: Bilakah Anda Harus Menggunakan `menunggu` Daripada `.Result` dalam Tugasan Async C#?

DDD
DDDasal
2025-01-22 22:51:09801semak imbas

Await vs. Result: When Should You Use `await` Instead of `.Result` in C# Async Tasks?

Pilihan await dan .Result dalam tugas tak segerak C#

Dalam "Buku Panduan Pengaturcaraan Serentak C#" Stephen Cleary, satu teknik menarik perhatian saya:

<code class="language-csharp">var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
  return null;
return await downloadTask;</code>

Memandangkan downloadTask akan selesai tanpa tamat masa, mengapa kita perlu melakukan satu saat await dan bukannya kembali terus ke downloadTask.Result?

Kelebihan

await berbanding .Result

Pengarang menyerlahkan dua sebab utama untuk menggunakan await sebagai keutamaan kepada .Result (atau Wait):

  1. Pengendalian Pengecualian: await tidak membalut pengecualian dalam AggregateException, memberikan mekanisme pengendalian pengecualian yang lebih jelas.
  2. Elakkan kebuntuan: Menggunakan .Result atau Wait dalam kaedah tak segerak boleh menyebabkan kebuntuan atau isu masa jalan yang halus.

Panduan Pengguna

Walaupun penggunaan .Result atau Wait tidak dilarang sepenuhnya, garis panduan berikut disyorkan:

  • Kod aplikasi tak segerak: Sentiasa gunakan await.
  • Pustaka Utiliti Tak Segerak: Boleh digunakan dengan .Result atau Wait dengan berhati-hati dan dengan dokumentasi yang mencukupi.
  • Kod tugas selari: Untuk tugas selari bukan tak segerak, .Result dan Wait adalah sesuai.

Dengan mengikut garis panduan ini, pembangun boleh meningkatkan pengendalian pengecualian, mengelakkan kebuntuan dan menulis kod tak segerak yang lebih mantap dan boleh diselenggara.

Atas ialah kandungan terperinci Menunggu lwn. Keputusan: Bilakah Anda Harus Menggunakan `menunggu` Daripada `.Result` dalam Tugasan Async C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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