Task.GetAwaiter().GetResult()
lwn. Task.Result
: Bila hendak menggunakan yang mana?
Keperluan untuk melaksanakan kaedah asynchronous secara serentak dalam kod adalah sangat biasa. Ini boleh dicapai melalui atribut Task
atau .GetAwaiter().GetResult()
.Result
. Walau bagaimanapun, adalah penting untuk memahami nuansa dan potensi kelemahan kedua-dua pendekatan.
Task.GetAwaiter().GetResult()
Memanggil Task
pada .GetAwaiter().GetResult()
akan mendapatkan terus keputusannya atau membuang sebarang pengecualian yang tidak diperhatikan. Tingkah laku ini lebih baik daripada .Wait()
dan .Result
kerana ia memastikan penyebaran pengecualian asal tanpa merangkumnya dalam AggregateException
.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa .GetAwaiter().GetResult()
, seperti .Wait()
dan .Result
, mempunyai risiko kebuntuan yang sama dan keletihan sumber kumpulan benang.
Task.Result
Task
.Result
juga akan mendapatkan semula keputusannya dan akan membuang TaskCanceledException
jika tugasan dibatalkan. Walau bagaimanapun, sebarang pengecualian lain yang tidak diperhatikan dalam operasi tak segerak akan ditangkap dan dibungkus dalam AggregateException
.
Bila hendak menggunakan kaedah yang mana
Walaupun .GetAwaiter().GetResult()
mempunyai kelebihan penyebaran pengecualian, adalah sangat disyorkan untuk mengelakkan penyekatan segerak tugas tak segerak apabila boleh. Pendekatan ini boleh menyebabkan kebuntuan dan keletihan sumber. Sebaliknya, pertimbangkan untuk menulis kod tak segerak sepenuhnya menggunakan mekanisme async/await
untuk mengelakkan masalah ini.
Atas ialah kandungan terperinci `.GetAwaiter (). GetResult ()` vs `task.result`: Bilakah anda harus menggunakan masing -masing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!