Rumah >pembangunan bahagian belakang >C++ >Mengapa memanggil `.Result` pada tugas` async` membawa kepada kebuntuan di C#?

Mengapa memanggil `.Result` pada tugas` async` membawa kepada kebuntuan di C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-31 13:46:09675semak imbas

Why Does Calling `.Result` on an `async` Task Lead to Deadlocks in C#?

Memahami kebuntuan dengan dan await dalam C#.Result

Ujian anda digantung pada

kerana salah faham asas pengaturcaraan tak segerak dalam C#. Mari kita jelaskan masalahnya. CheckStatus().Result

Operasi Asynchronous dalam C#

Pengaturcaraan Asynchronous membolehkan operasi berjalan serentak tanpa menyekat benang utama.

dan async adalah kata kunci yang memudahkan ini dalam C#. await

Peranan await

Jeda pelaksanaan dalam kaedah await sehingga tugas yang ditunggu -tunggu selesai. Secara kritis, benang utama tetap tidak disekat, membolehkan kod lain dilaksanakan. async

perangkap .Result

harta benda

objek .Result, bagaimanapun, mengambil hasil Task serentak . Ini bermakna benang panggilan disekat sehingga tugas selesai. Tingkah laku menyekat ini adalah punca utama kebuntuan apabila digunakan secara tidak wajar dengan . await

Senario kebuntuan

Dalam ujian gagal anda,

memaksa pelaksanaan segerak kaedah CheckStatus().Result. Sebelum ini selesai, satu lagi async dicuba. Kedua await CheckStatus() ini gagal kerana panggilan pertama (melalui await) masih menyekat benang, mewujudkan kebuntuan. .Result

Pendekatan yang betul

Untuk mengelakkan kebuntuan, secara konsisten gunakan

untuk mengendalikan hasil dari await kaedah. Elakkan memanggil async secara langsung. Ini memastikan operasi tidak segerak diteruskan tanpa menyekat benang. .Result

Atas ialah kandungan terperinci Mengapa memanggil `.Result` pada tugas` async` membawa kepada kebuntuan di C#?. 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