Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Sintaks Async/Await Syntax Baharu Mempengaruhi Operasi Api-dan-Lupa dalam C#?
Operasi tak segerak "fire-and-forget" C# tradisional, menggunakan perwakilan dan perwakilan tak segerak, laksanakan tugas tanpa menyekat utas utama. Pengenalan async
/await
memperhalusi pendekatan ini.
Mari kita periksa perbandingan kaedah yang lebih lama dan lebih baru:
<code class="language-csharp">// Old approach Action<string> asyncAction = DoIt; asyncAction.BeginInvoke("Test", ar => { asyncAction.EndInvoke(ar); ar.AsyncWaitHandle.Close(); }, null); Console.WriteLine("Old-style main thread finished"); // New approach DoIt2("Test2"); Console.WriteLine("New-style main thread finished");</code>
Kedua-duanya mencapai hasil yang sama, tetapi async
/await
memudahkan proses, menghapuskan keperluan untuk EndInvoke
dan penutupan pemegang manual. Walau bagaimanapun, await Task.Yield();
mungkin diperlukan dalam senario tertentu.
Perbezaan prestasi antara kaedah ini boleh diabaikan. Kelebihan utama async
/await
terletak pada pengurusan sumbernya yang lebih baik; ia mengendalikan pembersihan secara automatik, menghapuskan risiko kebocoran sumber yang berkaitan dengan pengurusan pemegang manual.
Untuk melaksanakan kaedah segerak secara tak segerak, A()
, tanpa mengubah kodnya, bungkusnya dalam kaedah tak segerak:
<code class="language-csharp">public static async Task<TResult> InvokeAsync<TResult>(Func<TResult> action) { return await Task.Run(action); }</code>
Panggil pembungkus:
<code class="language-csharp">var task = InvokeAsync(A);</code>
async void
Adalah amalan terbaik untuk mengelakkan kaedah async void
kerana kerumitannya dalam pengendalian pengecualian. Pendekatan berasaskan Task
di atas menyediakan penyelesaian yang lebih mantap dan terurus untuk mengendalikan kemungkinan ralat.
Atas ialah kandungan terperinci Bagaimanakah Sintaks Async/Await Syntax Baharu Mempengaruhi Operasi Api-dan-Lupa dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!