Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk memanggil kaedah asynchronous dari kod segerak dalam C#?

Bagaimana untuk memanggil kaedah asynchronous dari kod segerak dalam C#?

Barbara Streisand
Lepaskan: 2025-02-02 12:46:18
asal
227 orang telah melayarinya

How to Call Asynchronous Methods from Synchronous Code in C#?

Panggil kaedah asynchronous dari kaedah penyegerakan dalam c#

pengaturcaraan asynchronous menjadi semakin popular dalam pembangunan C#. Kadang -kadang anda mungkin menghadapi situasi yang perlu memanggil kaedah asynchronous dari konteks penyegerakan. Walaupun ini biasanya dilaksanakan dengan kaedah asynchronous, artikel ini membincangkan pelbagai kaedah yang dibawa ke jurang ini.

Kaedah 1: Gunakan tugas.waitandunwrapexception

Jika kaedah asynchronous anda adalah mudah dan tidak perlu disegerakkan dengan konteksnya, anda boleh menggunakan tugas.waitandunwrapexception untuk mendapatkan hasilnya. Kaedah ini akan menyelesaikan sebarang keabnormalan yang mungkin berlaku semasa operasi tak segerak.

Kaedah 2: Gunakan asynccontext.runtask

<code class="language-csharp">var task = MyAsyncMethod();
var result = task.WaitAndUnwrapException();</code>
Salin selepas log masuk

Untuk kaedah yang perlu disegerakkan dengan konteks, anda boleh menggunakan asynccontext.runtask untuk membuat konteks bersarang. Secara lalai, AsyncContext merangkumi konteks penyegerakan semasa. Walau bagaimanapun, ia boleh digunakan untuk sebarang konteks.

Kaedah 3: Gunakan Task.run

<code class="language-csharp">var result = AsyncContext.RunTask(MyAsyncMethod).Result;</code>
Salin selepas log masuk
Jika asynccontext.runtask tidak boleh dilaksanakan, anda boleh menggunakan Task.run untuk memulakan operasi tak segerak pada benang berasingan. Kaedah ini membolehkan kaedah tak segerak untuk meneruskan pelaksanaan tanpa menyekat benang panggilan.

Langkah berjaga -jaga

Apabila menggunakan kaedah ini, sila ingat perkara berikut:
<code class="language-csharp">var task = Task.Run(async () => await MyAsyncMethod());
var result = task.WaitAndUnwrapException();</code>
Salin selepas log masuk

Kaedah hanya terpakai kepada kaedah yang tidak memerlukan penyegerakan konteks.

Kaedah 2 Jika kaedah asynchronous sedang menunggu insiden UI, ia boleh menyebabkan kebuntuan.

Kaedah Tiga memerlukan kaedah asynchronous dikendalikan dengan betul pada konteks multi -threaded.

Atas ialah kandungan terperinci Bagaimana untuk memanggil kaedah asynchronous dari kod segerak dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan