>  기사  >  백엔드 개발  >  C# 비동기

C# 비동기

WBOY
WBOY원래의
2024-09-03 15:31:52576검색

비동기적으로 실행되는 C#의 특수 메서드를 비동기 메서드라고 하며 async 수식자를 사용하여 메서드를 비동기화할 수 있으며, C#에서는 비동기 메서드를 사용하여 비동기 작업을 수행할 수 있고, 메서드 실행은 대기 표현식을 사용하여 일시 중단할 수 있습니다. C# 및 async 수정자가 있는 메서드에 이 Wait 표현식이 없으면 해당 메서드는 메서드가 비동기 메서드이고 비동기 메서드의 반환 유형이 Task, Task인 경우에도 동기식 및 비동기식으로 실행됩니다. Void(이벤트 핸들러용) 및 System.Threading.Tasks.ValueTask.

C# 비동기 방식의 구문:

public async Task<int> Method_name()
{
// Block of code
}
  • async가 사용되는 수정자입니다.
  • Methodname은 메소드에 부여된 이름입니다.

C#의 비동기식 작업

  • 프로그램의 로직에서 대기 가능한 작업을 사용해야 할 때마다 웹에서 무언가를 다운로드하거나 대용량 파일을 읽거나 계산을 수행하는 등 완료하는 데 오랜 시간이 걸리는 작업을 수행할 수 있는 비동기식 방법을 사용합니다. 이는 애플리케이션의 정상적인 실행을 방해하거나 차단하지 않고 매우 복잡합니다. 이는 우리 프로그램에서 async 및 wait 수정자를 사용하여 가능합니다.
  • 비동기 메서드는 프로그램의 흐름과 관련이 없는 작업을 수행하는 관련 작업과 별도로 호출되며 작업을 완료할 수 있는 상태에서 대기하게 되며 그에 따라 해당 값을 반환합니다. 다음 문에서 사용할 수 있는 정의 또는 제어가 비동기 메서드의 호출자로 이동하여 작업 실행을 중단하지 않고 프로그램 실행을 재개하는 동안 작업을 계속 수행할 수 있으며 작업이 완료되면 나머지 비동기 메서드가 실행되고 해당 정의에 따라 해당 값을 반환합니다.

C# 비동기의 예

다음은 언급된 예입니다.

예시 #1

파일 내용을 읽고 파일의 문자 수를 확인하는 프로그램의 비동기식 방법을 보여주는 C# 프로그램

코드:

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;
}
}

출력:

C# 비동기

설명:

  • 위 프로그램에서는 check라는 클래스가 정의된 다음 파일을 생성하고 파일에 내용을 쓰는 메인 메소드가 호출됩니다.
  • 그런 다음 비동기 메서드 ReadFileusingAsync를 호출하는 작업이 생성되고 컨트롤은 파일 내용을 읽는 작업이 수행되는 해당 메서드로 이동합니다.
  • 그런 다음 파일의 내용을 읽으면서 길이 함수를 사용하여 문자의 길이를 구하고 이를 호출 메서드에 반환합니다.
  • 호출 메서드는 제어가 다시 돌아올 때까지 기다린 후 결과를 표시하기 위해 프로그램의 정상적인 흐름이 재개됩니다.

예시 #2

프로그램의 비동기 방식을 보여주는 C# 프로그램

코드:

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;
}
}

출력:

C# 비동기

설명:

  • 위 프로그램에는 check라는 클래스가 정의되어 있습니다.
  • 그런 다음 비동기 메서드가 호출되는 기본 메서드가 호출되고 컨트롤은 문자열에 있는 숫자의 총 개수가 계산되는 비동기 메서드로 이동하여 기본 메서드가 계속 표시하는 동안 호출자 메서드에 대기하도록 요청합니다. 사용자가 제공한 입력입니다.

위 내용은 C# 비동기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:C# 비동기 대기다음 기사:C# 비동기 대기