Soalan:
Menggunakan ciri bahasa tak segerak/menunggu dengan HttpClient.GetAsync(...) dalam .NET 4.5 boleh menyebabkan kebuntuan dalam keadaan tertentu. Khususnya, menunggu keputusan HttpClient.GetAsync(...) boleh menyebabkan kebuntuan dalam situasi berikut:
Penjelasan:
Kebuntuan adalah disebabkan oleh penggunaan SynchronizationContext, yang memastikan bahawa hanya satu permintaan boleh diproses pada satu masa dalam ASP.NET. Apabila menggunakan await, kaedah disambung semula pada SynchronizationContext yang ditangkap, dalam kes ini konteks permintaan ASP.NET. Walau bagaimanapun, jika benang menyekat menunggu tugas selesai, ia tidak akan dapat menyambung semula kaedah dalam konteks permintaan ASP.NET, mengakibatkan kebuntuan.
Penyelesaian:
Untuk mengelakkan kebuntuan ini, ikuti amalan terbaik ini:
Dengan mengikuti garis panduan ini, anda boleh memastikan bahawa kesinambungan kaedah AsyncAwait_GetSomeDataAsync berjalan pada urutan latar belakang dan mengelak daripada menyekat urutan permintaan ASP.NET, dengan itu mengelakkan kebuntuan.
Maklumat lanjut:
Atas ialah kandungan terperinci Kenapa httpclient.getasync (...) kebuntuan apabila menggunakan menunggu/async dalam .net 4.5?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!