Memahami kebuntuan dalam async/menunggu (c#)
Deadlocks adalah masalah biasa apabila menggunakan C Ini berlaku kerana bagaimana konteks penyegerakan berinteraksi dengan operasi tak segerak.
async
await
akar kebuntuan
Kebuntuan timbul apabila kaedah tak segerak, katakan , dipanggil serentak dan kemudian hasilnya ditunggu -tunggu menggunakan
. Ini menghalang benang tunggal. Kerana kesinambungan memerlukan benang yang sama (konteks penyegerakan yang ditangkap), ia tidak dapat berjalan, mewujudkan kebuntuan. GetDataAsync
.Result
GetDataAsync
Penyelesaian: Pendekatan tidak menyekat
Kunci untuk mengelakkan ini adalah untuk mengelakkan menyekat benang tunggal. Daripada serentak menunggu operasi async selesai, gunakan pendekatan yang tidak menyekat:
di sini,
menjadualkan kesinambungan yang melaksanakan sekali<code class="language-csharp">public ActionResult ActionAsync() { // NON-BLOCKING ASYNC OPERATION GetDataAsync().ContinueWith(task => { var data = task.Result; // Access result safely here return View(data); }); return View();//or some other non-blocking return }</code>
mungkin perlu diselaraskan bergantung kepada rangka kerja tertentu dan tingkah laku yang dikehendaki. Pulangan yang lebih sesuai mungkin ContinueWith
atau serupa, bergantung pada konteks. GetDataAsync
Atas ialah kandungan terperinci Bagaimanakah async/menunggu kebuntuan yang dielakkan dalam konteks tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!