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
?
await
berbanding .Result
Pengarang menyerlahkan dua sebab utama untuk menggunakan await
sebagai keutamaan kepada .Result
(atau Wait
):
await
tidak membalut pengecualian dalam AggregateException
, memberikan mekanisme pengendalian pengecualian yang lebih jelas. .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:
await
. .Result
atau Wait
dengan berhati-hati dan dengan dokumentasi yang mencukupi. .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!