Rumah >pembangunan bahagian belakang >C++ >Apakah perbezaan utama antara `menunggu tugas.run (); kembali; `dan` kembali tugas.run () `dalam pengaturcaraan c# async, dan bagaimanakah pengendalian pengecualian kesan ini?
perbezaan utama antara await Task.Run(); return;
dan return Task.Run()
dalam pengaturcaraan tak segerak dan kesan terhadap rawatan yang tidak normal
Perbezaan utama antara kedua -dua serpihan kod adalah komunikasi yang tidak normal. Dalam versi " ", keabnormalan yang dibuang dalam tugas akan ditangkap dan disimpan dalam objek tugas yang dikembalikan. Apabila menunggu tugas, keabnormalan akan disebarkan. Sebaliknya, versi "
Generasi Kod await Task.Run(); return;
return Task.Run();
rawatan abnormal
pertimbangkan contoh berikut: await Task.Run(); return;
return Task.Run();
fungsi ini dikendalikan dengan betul tidak normal). kaedah void asynchronous
Untuk kaedah void tak segerak, logik komunikasi yang tidak normal adalah berbeza. Sekiranya ia wujud, keabnormalan yang dibuang dalam kaedah tidak sah yang tidak disengajakan akan dibuang dalam konteks benang semasa. Jika tidak, mereka akan dilemparkan melalui , dan pemanggil tidak dapat mengendalikannya pada bingkai timbunan yang sama.
<code class="language-csharp">static async Task OneTestAsync(int n) { await Task.Delay(n); } static Task AnotherTestAsync(int n) { return Task.Delay(n); }</code>
simulasi penyebaran abnormal yang tidak disengajakan DoTestAsync(OneTestAsync, -2)
await
DoTestAsync(AnotherTestAsync, -2)
Anda boleh menggunakan teknik untuk mensimulasikan tingkah laku komunikasi yang tidak normal kaedah asynchronous.
DoTestAsync
, sama dengan keadaan .
kemungkinan kunci mati ThreadPool.QueueUserWorkItem
Ini kerana cuba menunggu penyelesaian operasi tak segerak pada benang UI, dan operasi tak segerak itu sendiri juga perlu dilaksanakan pada benang UI, mengakibatkan kunci mati.
Singkatnya, menyediakan rawatan abnormal berstruktur, dan await Task.Run(); return;
secara langsung membuang kelainan kepada pihak panggilan, dan pihak panggilan perlu dikendalikan sendiri. Kaedah untuk dipilih bergantung pada strategi pemprosesan yang tidak normal dan konteks program anda. return Task.Run();
Versi ini lebih selamat, tetapi perlu mempertimbangkan masalah kunci mati yang berpotensi; await
Atas ialah kandungan terperinci Apakah perbezaan utama antara `menunggu tugas.run (); kembali; `dan` kembali tugas.run () `dalam pengaturcaraan c# async, dan bagaimanakah pengendalian pengecualian kesan ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!