Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memanggil Kaedah Tak Segerak Menggunakan Task.Run?

Bagaimanakah Saya Boleh Memanggil Kaedah Tak Segerak Menggunakan Task.Run?

DDD
Lepaskan: 2025-01-19 13:47:09
asal
892 orang telah melayarinya

How Can I Synchronously Call an Asynchronous Method Using Task.Run?

Gunakan Tugasan. Jalankan untuk memanggil kaedah tak segerak secara serentak

Pengaturcaraan tak segerak membolehkan kami melakukan operasi yang berjalan lama tanpa menyekat utas utama. Walau bagaimanapun, dalam beberapa kes kita mungkin perlu memanggil kaedah tak segerak secara serentak. Begini cara untuk mencapainya menggunakan Task.Run:

Adegan:

Pertimbangkan kaedah tak segerak berikut:

<code class="language-c#">public async Task<string> GenerateCodeAsync()
{
    string code = await GenerateCodeService.GenerateCodeAsync();
    return code;
}</code>
Salin selepas log masuk

Andaikan kita perlu memanggil kaedah ini secara serentak daripada kaedah segerak yang lain.

Penyelesaian:

Untuk menjalankan kaedah tak segerak secara serentak, kita boleh menggunakan kaedah Task.Run untuk melaksanakannya dalam urutan kumpulan benang:

<code class="language-c#">string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();</code>
Salin selepas log masuk

Kod ini menggunakan langkah berikut:

  1. Task.Run: Ia mencipta tugas kumpulan benang latar belakang dan melaksanakan kaedah GenerateCodeAsync.
  2. GetAwaiter(): Ia mendapatkan semula penunggu untuk tugasan, yang mewakili hasil operasi tak segerak.
  3. GetResult(): Ia menyekat urutan panggilan sehingga operasi tak segerak selesai dan mengembalikan hasil kaedah.

Kelemahan menggunakan .Hasil secara langsung:

Kaedah mudah untuk mengakses terus sifat Hasil tugasan (iaitu string code = GenerateCodeAsync().Result;) harus dielakkan kerana ia mempunyai kelemahan berikut:

  • Kebuntuan: Kaedah ini boleh menyebabkan kebuntuan jika kaedah async cuba mengakses urutan UI semasa menyekat. Task.Run melaksanakan kaedah dalam urutan yang berasingan, dengan itu menghalang masalah ini.
  • Pengendalian pengecualian: .Hasil Balut sebarang pengecualian yang dilemparkan dalam kaedah tak segerak dalam AggregateException. Dengan menggunakan .GetAwaiter().GetResult() kami mengelakkan masalah ini dan menerima pengecualian secara langsung.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanggil Kaedah Tak Segerak Menggunakan Task.Run?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan