프로그래밍/(도서)C#코딩의기술-실전

[C#] 코딩의기술(실전편) - 1.5 비동기 처리

Victory_HA 2022. 3. 31. 22:25

비동기 처리란? (Asynchronous)

  • 특정 로직의 실행이 끝날때까지 기다려주지 않고 나머지 코드를 먼저 실행하는것을 비동기 처리라고 합니다.
  • 비동기처리가 필요한 이유는 서버로 데이터를 요청했을 때, 서버가 언제 그 요청에 대한 응답을 줄지 모르는데 마냥 기다릴순 없기 때문입니다.

장점

  • 결과가 반환될 때까지 다른 작업을 할 수 있으므로 효율적으로 자원을 사용할 수 있습니다.
  • 비동기 메서드의 경우 메소드 호출만 할 뿐 그 결과를 기다리지 않습니다.
  • 여러가지 일을 동시에 처리할 수 있습니다.

단점

  • 동기 방식(Synchronous)에 비해 코딩하기 복잡합니다.
  • 결과 값 반환까지 시간이 더 소요 될 수 있습니다.

비동기 코드

  • task를 이용한 비동기 코드입니다.
  • 사실 다음 예제 코드에 ReadToEndAsync() 메서드 자체로 비동기 실행이 되기 때문에 Task.Run()과 Task.WaitAll()은 생략이 가능합니다.
static void Sample_Async()
{
    File.WriteAllText("sample.txt", "hello!");
    var reader = File.OpenText("sample.txt");
    var task1 = reader.ReadToEndAsync();
    var task2 = Task.Run(() =>
    {
        Console.WriteLine("world.");
    });

    Task.WaitAll(task1, task2);
    Console.WriteLine(task1.Result);
    reader.Close();
}

실행 결과

병렬 코드

static void Sample_Pallel()
{
    File.WriteAllText("sample.txt", "hello!");
    var reader = File.OpenText("sample.txt");

    Parallel.Invoke(() =>
    {
        Console.WriteLine(reader.ReadToEnd());
    }, () => { 
        Console.WriteLine("world.");
    });

    reader.Close();
}

실행 결과