Rumah >pembangunan bahagian belakang >C++ >`.GetAwaiter (). GetResult ()` vs `task.result`: Bilakah anda harus menggunakan masing -masing?

`.GetAwaiter (). GetResult ()` vs `task.result`: Bilakah anda harus menggunakan masing -masing?

Susan Sarandon
Susan Sarandonasal
2025-01-24 11:51:10260semak imbas

`.GetAwaiter().GetResult()` vs. `Task.Result`: When Should You Use Each?

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

Atribut

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!

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
Artikel sebelumnya:Adakah `Task.getAwaiter ().Artikel seterusnya:Adakah `Task.getAwaiter ().