Rumah  >  Artikel  >  pembangunan bahagian belakang  >  C# Asynchronous

C# Asynchronous

WBOY
WBOYasal
2024-09-03 15:31:52581semak imbas

Kaedah khas dalam C# yang melaksanakan asynchronous dipanggil kaedah Asynchronous dan kaedah boleh dijadikan asynchronous dengan menggunakan pengubah async dan tugas asynchronous boleh dilakukan menggunakan kaedah asynchronous dalam C# dan pelaksanaan kaedah boleh digantung dengan menggunakan ekspresi await dalam C# dan jika ungkapan menunggu ini tidak terdapat dalam kaedah yang mempunyai async pengubah suai, kaedah yang sepadan itu dilaksanakan secara serentak dan tidak segerak walaupun kaedah tersebut ialah kaedah tak segerak dan jenis pengembalian kaedah tak segerak ialah Task, Task, Tidak sah(untuk pengendali acara) dan System.Threading.Tasks.ValueTask.

Sintaks kaedah Asynchronous C#:

public async Task<int> Method_name()
{
// Block of code
}
  • async ialah pengubah suai yang digunakan.
  • Nama kaedah ialah nama yang diberikan kepada kaedah.

Kerja Kaedah Asynchronous dalam C#

  • Apabila logik dalam atur cara memerlukan penggunaan tugas yang boleh menunggu, kami menggunakan kaedah tak segerak yang mana kami boleh melakukan operasi yang mengambil masa yang lama untuk diselesaikan seperti memuat turun sesuatu daripada web, membaca fail besar atau melakukan pengiraan yang benar-benar kompleks tanpa mengganggu atau menyekat pelaksanaan biasa aplikasi. Ini boleh dilakukan dengan menggunakan pengubah suai tidak segerak dan tunggu dalam program kami.
  • Kaedah tak segerak dipanggil secara berasingan dengan tugas yang berkaitan dengannya yang melaksanakan tugas yang tidak berkaitan dengan aliran program dan ia dibuat untuk menunggu di mana ia boleh menyelesaikan tugas dan mengembalikan nilai masing-masing seperti takrifnya yang boleh digunakan dalam penyataan berikut atau ia mungkin masih menjalankan tugas semasa kawalan pergi ke pemanggil kaedah tak segerak dan menyambung semula pelaksanaan program tanpa mengganggu pelaksanaan tugas dan setelah tugas selesai, selebihnya kaedah tak segerak dilaksanakan dan ia mengembalikan nilai masing-masing mengikut takrifannya.

Contoh C# Asynchronous

Di bawah adalah contoh yang dinyatakan :

Contoh #1

Atur cara C# untuk menunjukkan kaedah Asynchronous dalam program untuk membaca kandungan fail dan menentukan kiraan bilangan aksara dalam fail.

Kod:

using System;
using System.IO;
using System.Threading.Tasks;
//a class called check is defined
class Check
{
//main method is called
public static void Main()
{
//a file is created
String pat = @"D:\Ext.txt";
//an instance of the string writer class is created, and the path of the file is passed as a parameter to append text to the file
using (StreamWritersw = File.AppendText(pat))
{
//data to be appended to the file is included
sw.WriteLine("Welcome to StreamWriter class in C#");
//the instance of the streamwriter class is closed after writing data to the File
sw.Close();
}
//ReadFileusingAsync method is called by creating a task and the control moves to ReadFileusingAsync method
Task<int>taskname = ReadFileusingAsync();
//When the control reaches await modifier in ReadFileusingAsync method, the control returns here as the task is still going on and the following statements are executed
Console.WriteLine("Task is being performed by the asynchronous method and we are asked to wait until the completion of the task using await method");
string givemeinput = Console.ReadLine();
Console.WriteLine("The flow of the program is resumed once the task is completed by the asynchronous method and the value is returned " + givemeinput);
//We are waiting to receive the value from the task of asynchronous method in case the value is not returned yet.
taskname.Wait();
//We have used Result method to obtain the value returned from the asynchronous method after the completion of task assigned to it
var z = taskname.Result;
Console.WriteLine("The number of characters in the file are: " + z);
Console.WriteLine("The program has completed its normal execution and the asynchronous method has read the file to count the number of characters in the file");
Console.ReadLine();
}
static async Task<int>ReadFileusingAsync()
{
string fileread = @"D:\Ext.txt";
//The following statements are executed which can take a longer time
Console.WriteLine("We have opened the file to read the contents of the file");
int counter = 0;
using (StreamReader read = new StreamReader(fileread))
{
//await modifier is used to ask the caller function to wait till the reading of the file is complete
string vart = await read.ReadToEndAsync();
counter += vart.Length;
//This is the unnecessary code that is time consuming we have included for the sake of explanation
for (int r = 0; r < 20000; r++)
{
int z = vart.GetHashCode();
if (z == 0)
{
counter--;
}
}
}
Console.WriteLine("We are done reading the file");
return counter;
}
}

Output:

C# Asynchronous

Penjelasan:

  • Dalam program di atas, kelas yang dipanggil semak ditakrifkan dan kemudian kaedah utama dipanggil di mana kami mencipta fail dan menulis kandungan ke dalam fail.
  • Kemudian tugasan dibuat yang memanggil kaedah tak segerak ReadFileusingAsync dan kawalan bergerak ke kaedah itu di mana tugas membaca kandungan fail dilakukan.
  • Kemudian panjang aksara diperoleh dengan menggunakan fungsi panjang semasa membaca kandungan fail dan perkara yang sama dikembalikan kepada kaedah panggilan.
  • Kaedah panggilan menunggu sehingga kawalan kembali kepadanya dan kemudian aliran normal program disambung semula untuk memaparkan hasilnya.

Contoh #2

Atur cara C# untuk menunjukkan kaedah Asynchronous dalam atur cara.

Kod:

using System;
using System.Threading.Tasks;
//a class called check is defined
class Check
{
static void Main()
{
while (true)
{
//the asynchronous method is called.
keeptrying();
string res = Console.ReadLine();
Console.WriteLine("The input given by the user while the computation is going on by the asynchronous method is: " + res);
}
}
static async void keeptrying()
{
//the caller function is asked to await
int t = await Task.Run(() =>compute());
Console.WriteLine("The total digits count in the string is: " + t);
}
static intcompute()
{
int counter = 0;
for (int a = 0; a < 10; a++)
{
for (int b = 0; b < 1000; b++)
{
string value = b.ToString();
counter += value.Length;
}
}
return counter;
}
}

Output:

C# Asynchronous

Penjelasan:

  • Dalam program di atas, kelas yang dipanggil semak ditentukan.
  • Kemudian kaedah utama dipanggil di mana kaedah tak segerak dipanggil dan kawalan bergerak ke kaedah tak segerak di mana jumlah kiraan digit dalam rentetan dikira yang meminta kaedah pemanggil menunggu sementara kaedah utama terus memaparkan input disediakan oleh pengguna.

Atas ialah kandungan terperinci C# Asynchronous. 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
Artikel sebelumnya:C# Tunggu AsyncArtikel seterusnya:C# Tunggu Async