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
Lepaskan: 2025-01-22 23:19:11
asal
266 orang telah melayarinya

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:

var completedTask = await Task.WhenAny(downloadTask, timeoutTask);
if (completedTask == timeoutTask)
  return null;
return await downloadTask;
Salin selepas log masuk

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