Rumah >pembangunan bahagian belakang >C++ >Kenapa `httpclient.getAsync (...)` Hang apabila menggunakan `menunggu`/` async` dalam asp.net?
async
/await
dan HttpClient.GetAsync(...)
Kebuntuan: PenyelesaianMasalahnya: Menggunakan HttpClient.GetAsync(...)
dalam kaedah ASP.NET async
boleh membawa kepada kebuntuan. Ini berlaku kerana model pemprosesan permintaan satu benang ASP.NET bercanggah dengan sifat tak segerak HttpClient
. Apabila await
menjeda pelaksanaan, urutan dilepaskan, tetapi meneruskan tugasan mungkin cuba mendapatkan semula urutan yang sama yang telah diduduki oleh permintaan lain, menyebabkan terhenti.
Memahami Kebuntuan:
httpClient.GetAsync
mengembalikan Task
yang tidak lengkap.await
menggantung urutan semasa sehingga Task
tamat.Task
cuba menyambung semula dalam konteks permintaan ASP.NET, tetapi konteksnya sudah digunakan.Penyelesaian Utama:
ConfigureAwait(false)
: Kaedah penting ini menghalang penerusan Task
daripada dijadualkan kembali ke konteks asal (cth., urutan permintaan ASP.NET). Ini menghapuskan potensi kebuntuan berkaitan konteks.
Elakkan Menyekat: Sentiasa gunakan await
dan bukannya kaedah seperti GetResult()
yang menyekat secara serentak pada Task
, terus membawa kepada kebuntuan.
Contoh Kod:
Kod Bermasalah:
<code class="language-csharp">public async Task<string> GetSomeDataAsync() { var httpClient = new HttpClient(); var result = await httpClient.GetAsync("http://stackoverflow.com", HttpCompletionOption.ResponseHeadersRead); return result.Content.Headers.ToString(); }</code>
Kod Dibetulkan:
<code class="language-csharp">public async Task<string> GetSomeDataAsync() { var httpClient = new HttpClient(); var result = await httpClient.GetAsync("http://stackoverflow.com", HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false); return result.Content.Headers.ToString(); }</code>
Bacaan Lanjut:
Untuk pemahaman yang lebih mendalam tentang pengaturcaraan tak segerak dalam .NET dan cara mengelakkan kebuntuan, rujuk sumber ini:
Dengan menggunakan secara konsisten ConfigureAwait(false)
dalam kaedah tak segerak anda, anda boleh mencegah kebuntuan ini dengan berkesan dan memastikan operasi lancar aplikasi ASP.NET anda.
Atas ialah kandungan terperinci Kenapa `httpclient.getAsync (...)` Hang apabila menggunakan `menunggu`/` async` dalam asp.net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!