C# Tunggu Async

WBOY
Lepaskan: 2024-09-03 15:31:46
asal
687 orang telah melayarinya

Dalam C#, kata kunci tak segerak dan menunggu digunakan dalam pengaturcaraan tak segerak. Kadangkala dalam aplikasi kami, UI disekat kerana beberapa proses seperti kaedah yang lama berjalan dalam aplikasi kami. UI menjadi responsif apabila proses ini tamat.

Jika kami mahu aplikasi kami responsif tanpa mengira sebarang proses yang berjalan di latar belakang, maka kami boleh menggunakan kata kunci tak segerak dan menunggu yang akan menjadikan kod kami tidak segerak yang hasilnya membolehkan aplikasi kami mula melaksanakan kod lain apabila sudah kaedah panjang sedang dilaksanakan yang bebas daripada kod lain.

Sintaks:

public asyncTask<em>MethodName</em>()
{
await Task.Run(
//user code
);
}
Salin selepas log masuk

Dalam penyataan di atas, kata kunci async dan tunggu tentukan bahawa kod ini ialah kod tak segerak. Kaedah 'MethodName'akan melaksanakan secara tak segerak dan ia akan melaksanakan kod di dalam Task.Run() tanpa menyekat aplikasi.

Bagaimana Await dan Async Berfungsi dalam C#?

Dalam pengaturcaraan berurutan dan segerak, kod tidak akan dilaksanakan lagi iaitu kenyataan seterusnya tidak akan dilaksanakan sehingga dan melainkan pernyataan semasa selesai berfungsi. Jenis pelaksanaan sedemikian memerlukan lebih banyak masa untuk pengiraan yang panjang dan kadangkala boleh menjadikan aplikasi kami tidak responsif. Untuk mengatasi situasi sedemikian, kami boleh menjadikan kod kami tidak segerak dengan bantuan async dan menunggu kata kunci.

Sebagai contoh, jika kita mempunyai dua kaedah dalam kod kita dan kaedah ini adalah bebas antara satu sama lain. Kaedah pertama melakukan pengiraan yang panjang dan kaedah kedua mencetak beberapa butiran permohonan. Kaedah pertama memerlukan lebih banyak masa untuk dilaksanakan daripada kaedah kedua. Jika kod kami adalah segerak maka kaedah kedua tidak akan dilaksanakan sehingga dan melainkan kaedah pertama menyelesaikan pelaksanaannya.

Sebaliknya, jika kami telah menggunakan tak segerak dan menunggu kata kunci dalam kaedah pertama kami untuk menjadikannya tak segerak maka kaedah kedua boleh memulakan pelaksanaannya tanpa mengira penyempurnaan kaedah pertama. Pengaturcaraan tak segerak ini mengambil sedikit masa untuk dilaksanakan dan dengan itu menjadikan aplikasi kami lebih responsif dan mesra pengguna sifatnya.

Sebarang kaedah menggunakan kata kunci tunggu mesti ditandakan sebagai tidak segerak. Kata kunci async digunakan dalam tandatangan kaedah yang memberitahu pengkompil bahawa kaedah ini ialah kaedah tak segerak. Kami juga boleh menggunakan async pada kaedah terlebih beban. Menulis kod tak segerak menggunakan async dan menunggu tidak bermakna bahawa tugas kami akan dilakukan oleh berbilang utas tetapi ia memastikan bahawa utas utama aplikasi tidak akan disekat. Kami tidak boleh menggunakan async tanpa menunggu dan juga kami tidak boleh menggunakan await tanpa async. Kami boleh menggunakan kata kunci ini untuk menulis kod tak segerak bagi melaksanakan kedua-dua operasi terikat IO dan terikat CPU.

Dalam kaedah tak segerak, pengendali menunggu menggantung pemprosesan kaedah itu sehingga operannya selesai melaksanakan operasi tak segerak yang sepadan. Selepas selesai operasi tak segerak, pengendali menunggu mengembalikan hasil operasi tak segerak ini. Sebaliknya, jika operan pengendali menunggu telah pun menyelesaikan operasinya maka pengendali menunggu tidak menggantung pemprosesan kaedah tak segerak yang sepadan dan segera mengembalikan hasil operasi tanpa sebarang penggantungan kaedah tak segerak. Pada penggantungan kaedah tak segerak oleh pengendali menunggu, kawalan daripada kaedah tak segerak itu kembali kepada kaedah pemanggil.

Sila cari di bawah beberapa perkara untuk diingat semasa bekerja dengan async dan tunggu kata kunci:

  • Jika kaedah ditandakan sebagai tak segerak maka harus ada penggunaan operator await dalam kaedah ini jika tidak, pengguna akan mendapat amaran daripada pengkompil dan kaedah itu akan dilaksanakan seperti kaedah biasa yang lain.
  • ‘Async void’ hendaklah digunakan hanya untuk pengendali acara dan bukan untuk kaedah kerana acara itu tidak mempunyai sebarang jenis pemulangan.
  • Pengecualian yang dilemparkan oleh kaedah yang ditandakan sebagai 'async void' tidak boleh ditangkap di luar kaedah dan juga amat sukar untuk menguji kaedah sedemikian.

Contoh C# Await Async

Berikut adalah contoh yang diberikan di bawah:

Contoh #1

Kod:

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp4
{
public class Program
{
public static void Main()
{
TaskMethod();
Console.ReadLine();
}
public static async void TaskMethod()
{
Task<int> task = new Task<int>(CountCharacters);
task.Start();
Console.WriteLine("1. Other task executing");
Console.WriteLine("2. Other task executing");
Console.WriteLine("3. Other task executing");
int count = await task;
Console.WriteLine(" Total characters in file: " + count);
Console.WriteLine("1. After executing task");
Console.WriteLine("2. After executing task");
}
//method to count number of characters in file
public static intCountCharacters()
{
int count = 0;
string filePath = @"E:\Content\content.txt";
Console.WriteLine("Reading file");
using (StreamReaderstreamReader = new StreamReader(filePath))
{
//reading the whole content of the file
string fileContent = streamReader.ReadToEnd();
count = fileContent.Length;
}
Console.WriteLine("File reading completed");
return count;
}
}
}
Salin selepas log masuk

Output:

C# Tunggu Async

Kita dapat melihat dalam output bahawa program di atas dilaksanakan secara tidak segerak. Proses pembacaan fail dimulakan dan semasa fail dibaca, pernyataan selepas proses pembacaan fail mula dilaksanakan tanpa menunggu fail dibaca sepenuhnya.

Contoh #2

Sila cari di bawah satu lagi contoh tak segerak dan tunggu untuk mengira jumlah nombor hingga 1000.

Kod:

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp4
{
public class Program
{
public static void Main()
{
TaskMethod();
Console.ReadLine();
}
public static async void TaskMethod()
{
Task<int> task = new Task<int>(AddNumbers);
task.Start();
Console.WriteLine("1. Other task executing");
Console.WriteLine("2. Other task executing");
Console.WriteLine("3. Other task executing");
int total = await task;
Console.WriteLine(" Sum of numbers till 1000: " + total);
Console.WriteLine("1. After executing task");
Console.WriteLine("2. After executing task");
}
//method to add numbers from 1 to 1000
public static intAddNumbers()
{
int count = 0;
Console.WriteLine("Adding numbers");
for (inti = 0; i<= 1000; i++)
{
count += i;
}
return count;
}
}
}
Salin selepas log masuk

Output:

C# Tunggu Async

Kesimpulan

Kata kunci tak segerak dan menunggu dalam C# digunakan untuk menulis kod tak segerak. Jika kaedah melakukan pengiraan yang panjang atau jika terdapat operasi yang memerlukan lebih banyak masa untuk dilaksanakan maka kami boleh melakukan operasi ini secara tidak segerak kerana aplikasi kami akan responsif.

Atas ialah kandungan terperinci C# Tunggu Async. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php
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