C#에서 비동기 및 대기
이 자습서에서는 C#의 비동기 프로그래밍에 대해 설명합니다.
C#의 비동기 프로그래밍
동기 응용 프로그램에서 프로세스가 차단되면 전체 응용 프로그램이 차단되고 특정 프로세스가 완료 될 때까지 응답을 중지합니다. 이 시나리오에서는 비동기 프로그래밍을 사용할 수 있습니다. 비동기 프로그래밍을 사용하면이 특정 프로세스가 실행될 때까지 일부 독립 작업에 대해 백그라운드에서 계속 작업 할 수 있습니다. 비동기 프로그래밍에서 전체 애플리케이션은 단순히 시간이 많이 걸리는 단일 프로세스에 의존하지 않습니다. 비동기 프로그래밍은 I/O 바운드 또는 CPU 바운드 작업에 사용됩니다. 비동기 프로그래밍의 주요 용도는 I/O 바운드 또는 CPU 바운드 프로세스가 실행을 완료 할 때까지 기다리는 동안 멈추지 않는 반응 형 사용자 인터페이스를 만드는 것입니다. await
및async
키워드는 C#의 비동기 프로그래밍에 사용됩니다. await
키워드는 호출 함수에 제어를 다시 제공합니다. await
키워드는 C#에서 비동기 프로그래밍을 가능하게하는 기본 키워드입니다. async
키워드는await
키워드를 활성화합니다. await
키워드를 사용하는 함수에는async
키워드가 있어야하며 C#에서Task
개체를 반환해야합니다. await
키워드는 C#에서async
키워드없이 사용할 수 없습니다. 다음 코드 예제는 C#의 동기 프로그래밍을 보여줍니다.
using System;
using System.Threading.Tasks;
namespace async_and_await {
class Program {
public static void process1() {
for (int i = 0; i < 5; i++) {
Console.WriteLine("Process 1");
Task.Delay(100).Wait();
}
}
public static void process2() {
for (int i = 0; i < 5; i++) {
Console.WriteLine("Process 2");
Task.Delay(100).Wait();
}
}
static void Main(string[] args) {
process1();
process2();
}
}
}
출력:
Process 1
Process 1
Process 1
Process 1
Process 1
Process 2
Process 2
Process 2
Process 2
Process 2
위 코드에서process1()
및process2()
함수는 독립적 인 프로세스이지만process2()
함수는process1()
함수가 완료 될 때까지 기다려야합니다. 이 간단한 동기 프로그래밍 코드는 C#의async
및await
키워드를 사용하여 비동기 프로그래밍으로 변환 할 수 있습니다.
using System;
using System.Threading.Tasks;
namespace async_and_await {
class Program {
public static async Task process1() {
await Task.Run(() => {
for (int i = 0; i < 5; i++) {
Console.WriteLine("Process 1");
Task.Delay(100).Wait();
}
});
}
public static void process2() {
for (int i = 0; i < 5; i++) {
Console.WriteLine("Process 2");
Task.Delay(100).Wait();
}
}
static void Main(string[] args) {
process1();
process2();
}
}
}
출력:
Process 2
Process 1
Process 1
Process 2
Process 2
Process 1
Process 1
Process 2
Process 2
Process 1
위의 코드에서async
및await
키워드를 사용하여 이전 예제를 비동기 프로그래밍으로 변환했습니다. 출력은process2()
함수가process1()
함수를 완료 할 때까지 기다리지 않음을 명확하게 보여줍니다. process1()
함수의 정의에서async
키워드를 사용하여 이것이 비동기 적으로 실행되는 함수임을 제안했습니다. process1()
함수의await
키워드는 제어를 주 함수에 다시 제공 한 다음process2()
함수를 호출합니다. 제어는process1()
함수가 완료 될 때까지process1()
및process2()
함수 사이를 계속 이동합니다.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn