Dalam pengaturcaraan asynchronous .NET, memahami perbezaan antara await
dan Result
sangat penting. Result
Benarkan pemprosesan pelbagai tugas kolaboratif, dan boleh menyebabkan kunci mati.
await
Prinsip kerja dan penyebab halangan Result
await
Result
digantung dalam contoh kerana ia cuba menggunakan untuk mendapatkan hasil await
dua kali secara serentak. Ini boleh menyebabkan kunci mati kerana permintaan HTTP yang mendasari disekat apabila menunggu tindak balas. Result
CheckStatusTwiceResultTest
Result
Kata kunci membolehkan pelaksanaan kaedah jeda, dan pelaksanaannya disambung semula selepas operasi tak segerak selesai. Dalam contoh ini, tidak akan digantung apabila runtime, kerana CheckStatus()
kata kunci akan dikawal ke tugas lain apabila menunggu respons HTTP.
pengaturcaraan segerak dan tidak segerak await
Kaedah lanjutan Buat
dalam tugas kembali sebenarnya menjalankan operasi tak segerak dalam penyegerakan. Inilah sebabnya await
tergantung. CheckStatusAwaitTest
await
Elakkan kunci mati
Untuk mengelakkan kunci mati, hasil mendapatkan operasi tak segerak selalu digunakan. Amalan terbaik adalah untuk mengelakkan panggilan
pada tugas, terutamanya ketika melakukan di benang UI atau persekitaran sensitif yang lain.
ExecuteTaskAsync
TaskCompletionSource
Result
CheckStatusTwiceResultTest
dalam kod. Untuk kaedah asynchronous, ini tidak disyorkan, kerana akan memperuntukkan benang baru. Sebaliknya, asynchronousness yang disediakan oleh rangka .NET harus digunakan, dan kaedah harus ditetapkan kepada kaedah tak segerak.
Atas ialah kandungan terperinci Tunggu vs menghasilkan .NET Pengaturcaraan Asynchronous: Mengapa Menggunakan 'Hasil' membawa kepada kebuntuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!