Rumah >pembangunan bahagian belakang >C++ >Mengapa memanggil `.Result` pada tugas` async` membawa kepada kebuntuan di C#?
Memahami kebuntuan dengan dan await
dalam C#.Result
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
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!