C#에서 비동기 및 대기

Muhammad Maisam Abbas 2024년2월16일
C#에서 비동기 및 대기

이 자습서에서는 C#의 비동기 프로그래밍에 대해 설명합니다.

C#의 비동기 프로그래밍

동기 응용 프로그램에서 프로세스가 차단되면 전체 응용 프로그램이 차단되고 특정 프로세스가 완료 될 때까지 응답을 중지합니다. 이 시나리오에서는 비동기 프로그래밍을 사용할 수 있습니다. 비동기 프로그래밍을 사용하면이 특정 프로세스가 실행될 때까지 일부 독립 작업에 대해 백그라운드에서 계속 작업 할 수 있습니다. 비동기 프로그래밍에서 전체 애플리케이션은 단순히 시간이 많이 걸리는 단일 프로세스에 의존하지 않습니다. 비동기 프로그래밍은 I/O 바운드 또는 CPU 바운드 작업에 사용됩니다. 비동기 프로그래밍의 주요 용도는 I/O 바운드 또는 CPU 바운드 프로세스가 실행을 완료 할 때까지 기다리는 동안 멈추지 않는 반응 형 사용자 인터페이스를 만드는 것입니다. awaitasync키워드는 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#의asyncawait키워드를 사용하여 비동기 프로그래밍으로 변환 할 수 있습니다.

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

위의 코드에서asyncawait키워드를 사용하여 이전 예제를 비동기 프로그래밍으로 변환했습니다. 출력은process2()함수가process1()함수를 완료 할 때까지 기다리지 않음을 명확하게 보여줍니다. process1()함수의 정의에서async키워드를 사용하여 이것이 비동기 적으로 실행되는 함수임을 제안했습니다. process1()함수의await키워드는 제어를 주 함수에 다시 제공 한 다음process2()함수를 호출합니다. 제어는process1()함수가 완료 될 때까지process1()process2()함수 사이를 계속 이동합니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

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