menggunakan /HttpClient.GetAsync(...)
kadang -kadang, await
async
Apabila menggunakan fungsi bahasa dan tugas baru dan tugas -tugas baru dalam .NET 4.5, hasil "menunggu"
async
Penjelasan await
httpClient.GetAsync(...)
Secara lalai, apabila menunggu tugas, kaedah akan pulih pada penyegerakan yang ditangkap atau ditangkap Taskscheduler (tanpa SynchronizationContext). Biasanya, ini sesuai: operasi pengawal tak segerak akan menunggu beberapa kandungan.
Kaedah pengawal khusus ini melaksanakan asyncawait_getsomedataasync (dalam permintaan ASP.NET). Asyncawait_getsomedataasync melaksanakan httpclient.getAsync (dalam permintaan ASP.NET). Permintaan HTTP dihantar, dan httpclient.getasync mengembalikan tugas yang belum selesai. Kemudian, asyncawait_getsomedataasync sedang menunggu tugas yang belum selesai, jadi ia mengembalikan tugas yang belum selesai. Sekarang, test5controller.get menghalang benang semasa sehingga tugas selesai.
Respons HTTP akan datang, dan tugas yang dikembalikan oleh httpclient.getasync selesai. Kemudian, asyncawait_getsomedataasync cuba pulih dalam konteks permintaan ASP.NET. Walau bagaimanapun, sudah ada benang dalam konteks: benang yang menyekat dalam test5controller.get. Ini akan menyebabkan kunci mati. Amalan Terbaik
Untuk membetulkan masalah ini, saya cadangkan:
Gunakan dalam kaedah asynchronous "perpustakaan" anda. Dalam kes ini, asyncawait_getsomedataasync akan ditukar kepada
Elakkan menyekat tugas;
ConfigureAwait(false)
Atas ialah kandungan terperinci Kenapa `httpclient.getasync (...)` kadang -kadang kebuntuan apabila menggunakan `Await`/` async` dalam asp.net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!