Rumah > pembangunan bahagian belakang > C++ > Kenapa panggilan httpclient.getasync saya hang semasa menggunakan menunggu/async di asp.net?

Kenapa panggilan httpclient.getasync saya hang semasa menggunakan menunggu/async di asp.net?

DDD
Lepaskan: 2025-01-25 13:23:08
asal
748 orang telah melayarinya

Why Does My HttpClient.GetAsync Call Hang When Using Await/Async in ASP.NET?

di asp.net, semasa menggunakan menunggu/async

Dalam ASP.NET, hanya satu benang yang dapat mengendalikan satu permintaan pada masa yang sama. Walaupun ia boleh dilakukan secara selari, hanya satu benang yang mempunyai konteks permintaan. Benang ini dikawal oleh Asp.net SynchronizationContext. Apabila menunggu tugas, kaedah biasanya dipulihkan pada SynchronizationContext yang ditangkap (jika tidak ada kewujudan, ia adalah Taskscheduler). Ini selaras dengan tingkah laku yang dijangkakan operasi pengawal tak segerak.

Masalah dalam kes ujian 5

test5controller.get disebabkan oleh perintah berikut:

Panggil httpclient.getasync dalam konteks permintaan ASP.NET.

httpclient.getasync Hantar permintaan HTTP dan kembalikan tugas yang belum selesai.

    asyncawait_getsomedataasync menunggu tugas dan mengembalikan tugas yang belum selesai kerana permintaan masih sedang berjalan.
  1. test5controller.get menghalang benang semasa sehingga tugas dikembalikan oleh asyncawait_getsomedataasync.
  2. Terima respons HTTP, tugas httpclient.getasync selesai.
  3. asyncawait_getsomedataasync cuba pulih dalam konteks permintaan ASP.NET.
  4. kunci mati, kerana benang terhalang dalam test5controller.get masih memegang konteks permintaan.
  5. menyelesaikan masalah
  6. anda boleh melaksanakan beberapa amalan terbaik untuk mengelakkan masalah yang sama:

Gunakan ConfigureAwait (FALSE) untuk meneruskan penjadualan di luar konteks permintaan ASP.NET.

dengan menggunakan menunggu dan bukannya getResult atau tugas.wait untuk mengelakkan tugas menyekat.

    Kesimpulan
  • Memahami peranan SynchronizationContext dan amalan terbaik menggunakan teknologi async/menunggu, anda boleh memastikan bahawa anda menggunakan kod tak segerak dalam ASP.NET untuk dengan cekap dan tidak mempunyai kebuntuan apabila menggunakan kod asynchronous.

Atas ialah kandungan terperinci Kenapa panggilan httpclient.getasync saya hang semasa menggunakan menunggu/async di asp.net?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan