Rumah >pembangunan bahagian belakang >C++ >Async/Await: Patutkah saya Balut Kaedah Saya dalam `Task.Run` untuk Threading Latar Belakang?

Async/Await: Patutkah saya Balut Kaedah Saya dalam `Task.Run` untuk Threading Latar Belakang?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 12:31:40171semak imbas

Async/Await: Should I Wrap My Method in `Task.Run` for Background Threading?

Merungkai Async/Await: Method Wrapper atau Background Thread?

Dalam usaha memahami async/wait, dilema timbul: Adakah perlu untuk merangkum kaedah dalam Tugas. Jalankan untuk mencapai kedua-dua gelagat async dan pelaksanaan urutan latar belakang?

Kaedah Async lwn. Tugasan Yang Boleh Ditunggu

"Async" menandakan kaedah yang boleh menghasilkan kawalan kepada urutan panggilan sebelum memulakan pelaksanaan. Hasil ini berlaku melalui ekspresi menunggu. Sebaliknya, "tak segerak" seperti yang ditakrifkan oleh MSDN (istilah yang sering mengelirukan) merujuk kepada kod yang dijalankan pada urutan yang berasingan.

Secara berasingan, "boleh ditunggu" menerangkan jenis yang boleh digunakan dengan pengendali menunggu. Perkara biasa yang boleh ditunggu termasuk Tugas dan Tugas.

Kod Suaian untuk Pelaksanaan Benang Latar Belakang

Untuk melaksanakan kaedah pada urutan latar belakang sambil mengekalkan kebolehtungguan, gunakan Tugasan. Jalankan:

private Task<int> DoWorkAsync()
{
  return Task.Run(() => 1 + 2);
}

Walau bagaimanapun, pendekatan ini secara amnya tidak digalakkan.

Mendayakan Asynchronous Yielding

Untuk mencipta kaedah async yang boleh menjeda dan menghasilkan kawalan, isytiharkan kaedah sebagai async dan gunakan tunggu di titik hasil yang ditetapkan:

private async Task<int> GetWebPageHtmlSizeAsync()
{
  var html = await client.GetAsync("http://www.example.com/");
  return html.Length;
}

Memautkan Kod Asynchronous dan Awaitables

Async code bergantung pada yang boleh ditunggu dalam ekspresi menunggunya. Awaitables boleh jadi sama ada kaedah async lain atau kaedah segerak yang mengembalikan awaitables.

Kaedah Bungkus dalam Task.Run: Amalan Tidak Digalakkan

Elakkan membalut kaedah segerak secara sembarangan dalam Task.Run. Sebaliknya, kekalkan tandatangan segerak, meninggalkan pilihan untuk membalut kepada pengguna.

Sumber Tambahan untuk Async/Await

  • [Async/Await Asas](https://blog.stephencleary.com/2012/02/async-await-fundamentals.html)
  • [MSDN Async Documentation](https://docs.microsoft.com/en-us /dotnet/csharp/programming-guide/concepts/async/)

Atas ialah kandungan terperinci Async/Await: Patutkah saya Balut Kaedah Saya dalam `Task.Run` untuk Threading Latar Belakang?. 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