Rumah > pembangunan bahagian belakang > C++ > Task.Result vs. Task.GetAwaiter().GetResult(): Apakah Perbezaan dalam Pelaksanaan Segerak dan Pengendalian Pengecualian?

Task.Result vs. Task.GetAwaiter().GetResult(): Apakah Perbezaan dalam Pelaksanaan Segerak dan Pengendalian Pengecualian?

Linda Hamilton
Lepaskan: 2025-01-24 11:37:09
asal
232 orang telah melayarinya

Task.Result vs. Task.GetAwaiter().GetResult(): What's the Difference in Synchronous Execution and Exception Handling?

Pelaksanaan segerak bagi tugas tak segerak: perbezaan antara Task.Result dan Task.GetAwaiter().GetResult()

Apabila berurusan dengan kaedah tak segerak, kadangkala anda perlu melaksanakannya secara serentak. Walau bagaimanapun, terdapat dua cara biasa untuk melaksanakan secara serentak: Task.Result dan Task.GetAwaiter().GetResult(), dan terdapat perbezaan utama antara keduanya.

Perbandingan Tugasan.Tunggu dan Tugasan.GetAwaiter().GetResult()

Task.Wait dan Task.GetAwaiter().GetResult() kedua-duanya membenarkan tugas tak segerak dilaksanakan secara serentak. Walau bagaimanapun, mekanisme pengendalian pengecualian mereka adalah berbeza. Task.Wait membalut sebarang pengecualian dalam AggregateException, manakala Task.GetAwaiter().GetResult() melemparkan pengecualian asal secara langsung.

Cadangan

Untuk mengendalikan pengecualian mentah secara langsung, Task.GetAwaiter().GetResult() adalah lebih baik daripada Task.Wait. Walau bagaimanapun, kedua-dua kaedah harus dielakkan memihak kepada penggunaan async/await kerana dua yang pertama boleh menyebabkan kebuntuan dan masalah keletihan sumber kumpulan benang.

Sebab perbezaan

Perbezaan dalam pengendalian pengecualian antara

Task.Wait dan Task.GetAwaiter().GetResult() berpunca daripada keperluan keserasian ketat Microsoft. Untuk mengelak daripada memecahkan kod sedia ada, Task.Wait mengekalkan tingkah laku menyekat asalnya, membalut pengecualian dalam AggregateException.

Untuk mencetuskan penyebaran pengecualian secara langsung, anda boleh menggunakan task.GetAwaiter().GetResult(). Ambil perhatian bahawa Task.Result menyemak ralat tugas dan bukannya menyekat pelaksanaannya.

Atas ialah kandungan terperinci Task.Result vs. Task.GetAwaiter().GetResult(): Apakah Perbezaan dalam Pelaksanaan Segerak dan Pengendalian Pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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