dan : Penggunaan penggunaan yang berbeza dan penyebab kebuntuan await
Task.Result
Apabila memproses kod asynchronous, adalah penting untuk memahami perbezaan antara
untuk mendapatkan hasil. Kekeliruan boleh menyebabkan kunci mati, terutamanya apabila menggunakan API yang melaksanakan kaedah asynchronous. await
Task.Result
Pertimbangkan adegan ujian berikut:
Dalam ujian ini, kami mula -mula cuba menggunakan
[Test] public async void CheckStatusTwiceResultTest() { Assert.IsTrue(CheckStatus().Result); // 此处挂起 Assert.IsTrue(await CheckStatus()); }
untuk mendapatkan hasilnya. Walau bagaimanapun, kaedah ini akan digantung kerana kita sebenarnya melakukan penyempurnaan misi dalam penyegerakan dan menyekat benang pelaksanaan. Task.Result
CheckStatus
untuk memahami mengapa ini berlaku, kita perlu menyemak kaedah
CheckStatus
private async Task<bool> CheckStatus() { // 进行 REST API 调用 IRestResponse<dummyservicestatus> response = await restResponse; return response.Data.SystemRunning; }
await
kerana kaedah <本> itu sendiri mengandungi operasi tak segerak (panggilan API REST), mencuba Task.Result
penantian segerak akan menyebabkan kunci mati. Benang pelaksanaan utama sedang menunggu hasil panggilan API, dan panggilan API sedang menunggu benang utama untuk terus melaksanakan.
Kaedah yang betul untuk mengakses hasil kaedah asynchronous adalah menggunakan CheckStatus
kata kunci, seperti yang ditunjukkan dalam ujian berikut: Task.Result
di sini, kami menggunakan await
untuk melepaskan benang pelaksanaan, yang membolehkan API memanggil Asynchronous untuk diselesaikan. Selepas operasi selesai, lakukan pemulihan dan dapatkan hasil dari tugas tanpa menyebabkan kunci mati.
[Test] public async void CheckOnceAwaitTest() { Assert.IsTrue(await CheckStatus()); }
Kata kunci harus digunakan untuk melepaskan benang dan mencegah masalah tersebut. await
Atas ialah kandungan terperinci `menunggu` vs` tugas.result`: Bilakah anda harus menggunakan masing -masing dan mengapa seseorang menyebabkan kebuntuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!