Rumah >pembangunan bahagian belakang >C++ >Adakah `menunggu` pada Tugasan Selesai Sama dengan Menggunakan `Task.Result`?
await
lwn. Task.Result
untuk Tugasan Selesai: Analisis Perbandingan
"Concurrency in C# Cookbook" Stephen Cleary menunjukkan kaedah pengesanan penyelesaian tugas tanpa sekatan:
<code class="language-csharp">var completedTask = await Task.WhenAny(downloadTask, timeoutTask); if (completedTask == timeoutTask) return null; return await downloadTask;</code>
Ini menimbulkan persoalan: Adakah await
kedua perlu jika downloadTask
sudah lengkap? Mengapa tidak hanya menggunakan downloadTask.Result
?
Perbezaan utama terletak pada pengendalian pengecualian dan mengelakkan kebuntuan.
Pengendalian Pengecualian: Perbezaan Penting
Task.Result
membungkus pengecualian dalam AggregateException
, yang memerlukan pengendalian khusus. await
, bagaimanapun, menyebarkan pengecualian secara langsung, menjajarkan lebih baik dengan aliran semula jadi kod tak segerak dan mengelakkan kerumitan pengurusan AggregateException
.
Pencegahan Kebuntuan: Jaring Keselamatan
Task.Result
dan Task.Wait
boleh menimbulkan kebuntuan, terutamanya dalam kaedah tak segerak. Memandangkan menentukan penyelesaian tugas secara muktamad dalam senario dunia nyata selalunya mencabar, await
menyediakan alternatif yang lebih selamat.
Amalan Terbaik untuk Pengendalian Tugas
Untuk memastikan pengaturcaraan tak segerak yang mantap dan bebas kebuntuan, ikut garis panduan ini:
await
secara eksklusif.Task.Result
atau Task.Wait
mungkin boleh diterima dalam fungsi utiliti tertentu, tetapi sentiasa dengan dokumentasi yang jelas yang menggariskan potensi risiko.Task.Result
dan Task.Wait
mungkin lebih sesuai dalam senario selari yang dikawal dengan teliti.Dalam kebanyakan situasi, await
ialah pendekatan yang disyorkan untuk mengendalikan tugas yang telah selesai, menjamin operasi tak segerak yang boleh dipercayai dan bebas kebuntuan.
Atas ialah kandungan terperinci Adakah `menunggu` pada Tugasan Selesai Sama dengan Menggunakan `Task.Result`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!