Rumah >pembangunan bahagian belakang >C++ >Await Task.Run () vs Task.Run (): Apakah perbezaan utama dalam pengaturcaraan C# Asynchronous?

Await Task.Run () vs Task.Run (): Apakah perbezaan utama dalam pengaturcaraan C# Asynchronous?

Patricia Arquette
Patricia Arquetteasal
2025-01-30 03:51:14440semak imbas

Await Task.Run() vs. Return Task.Run(): What are the Key Differences in C# Asynchronous Programming?

c#pengaturcaraan asynchronous

perbezaan utama antara await Task.Run() return Task.Run() Dalam pengaturcaraan asynchronous, sering kali perlu melakukan operasi di luar benang UI untuk mengelakkan permohonan permohonan. Ini boleh dicapai melalui tugas di C#. Walau bagaimanapun, terdapat perbezaan halus antara

dan

apabila berurusan dengan keabnormalan dan aspek lain. await Task.Run() return Task.Run() <.> 1. Disposure:

Perbezaan utama ialah komunikasi yang tidak normal. Dalam <:> keadaan:

Keabnormalan dalam tugas tak segerak hanya akan menyebarkan kaedah panggil balik hanya apabila menunggu tugas. await Task.Run()

Ini membolehkan mereka menangani keabnormalan secara terkawal untuk menghalang mereka daripada tidak sengaja membuangnya pada benang UI.
  • sebaliknya, dalam dalam kes:
Keabnormalan yang dibuang semasa pelaksanaan tugas akan segera dibuang ke kaedah panggilan, dan bahkan sebelum memerhatikan tugas.

return Task.Run() Ini boleh menyebabkan kesilapan yang tidak disengajakan dan kebuntuan yang berpotensi.

  • <.> 2. Ketergantungan pada konteks segerak:
  • Perbezaan lain ialah
versi bergantung kepada konteks penyegerakan benang panggilan. Apabila tugas selesai, ia akan dilaksanakan dalam konteks penyegerakan yang sama. Ini memastikan bahawa kemas kini UI (seperti membolehkan butang kurang upaya) berlaku pada benang yang betul.

sebaliknya, versi tidak bergantung kepada konteks penyegerakan. Meneruskan susunan program penjadualan tugas lalai, yang mungkin berbeza dari konteks penyegerakan benang panggilan.

<.> 3. Kod yang dihasilkan:

await Task.Run()

Kod yang dihasilkan oleh kedua -dua kaedah adalah sedikit berbeza. Dalam kes , mesin status async/menunggu akan diwujudkan untuk menguruskan pelaksanaan asynchronous. Ini membawa kepada kod yang lebih rumit daripada .

return Task.Run() Contoh kod:

Contoh kod berikut menggambarkan perbezaan ini:

Contoh 1:

await Task.Run() return Task.Run()

Contoh 2:

Dalam kedua -dua contoh ini, "DosomeWork ()" adalah kaedah melakukan pekerjaan tertentu di luar benang UI.

Kesimpulan:

Pilihan dan

bergantung kepada keperluan khusus aplikasi. Apabila mengawal penyebaran yang tidak normal dan memastikan konteks penyegerakan yang betul adalah penting, adalah disyorkan untuk menggunakan
<code class="language-csharp">async Task TestAsync()
{
    await Task.Run(() => DoSomeWork()); // 异常在等待时传播回
}</code>
. Apabila ia tidak menjadi masalah untuk menyebarkan anomali atau menyegerakkan konteks dengan segera,

sesuai.

Atas ialah kandungan terperinci Await Task.Run () vs Task.Run (): Apakah perbezaan utama dalam pengaturcaraan C# Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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