Rumah >pembangunan bahagian belakang >C++ >Bilakah Anda Harus Menggunakan `menunggu` Daripada `Task.Result` untuk Tugasan yang Selesai?

Bilakah Anda Harus Menggunakan `menunggu` Daripada `Task.Result` untuk Tugasan yang Selesai?

Susan Sarandon
Susan Sarandonasal
2025-01-22 23:19:11256semak imbas

When Should You Use `await` Instead of `Task.Result` for Completed Tasks?

await lwn. Task.Result untuk Tugasan Selesai: Amalan Terbaik

"Concurrency in C# Cookbook" menunjukkan corak untuk mengendalikan tugasan yang telah selesai:

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

Kod ini menggunakan Task.WhenAny untuk menentukan sama ada downloadTask (panggilan httpclient.GetStringAsync) selesai sebelum timeoutTask (operasi Task.Delay).

Mengapa menggunakan await downloadTask dan bukannya hanya mengembalikan downloadTask.Result? Sebabnya adalah penting:

Pengendalian Pengecualian:

  • await mengelakkan kerumitan AggregateException. Task.Result atau Task.Wait() bungkus pengecualian dalam AggregateException, mengaburkan punca. Kod tak segerak seharusnya mengendalikan pengecualian secara langsung, menjadikan await penyelesaian yang lebih bersih.

Mengelakkan Kebuntuan:

  • Menggunakan Task.Result atau Task.Wait() dalam kaedah tak segerak boleh menyebabkan kebuntuan. await direka untuk konteks tak segerak dan menghalang perangkap biasa ini.

Ringkasan Amalan Terbaik:

  • Pilih await dalam kod aplikasi tak segerak untuk pengendalian pengecualian yang lebih baik dan pencegahan kebuntuan.
  • Walaupun Task.Result atau Task.Wait() mungkin boleh diterima dalam kod utiliti (dengan komen yang jelas menerangkan rasionalnya), ia lebih baik dielakkan.
  • Task.Result dan Task.Wait() boleh dipertimbangkan untuk senario tugasan selari di mana penyekatan segerak boleh diterima dan difahami.

Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan `menunggu` Daripada `Task.Result` untuk Tugasan yang Selesai?. 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