C# Asynchronous Programming Patterns

http://msdn.microsoft.com/en-us/library/jj152938.aspx

 

 요즘은 앱 전성 시대인거 같다. iOS를 기점으로 시작한 앱 개발 경쟁이 안드로이드와 Windows Phone으로 까지 번기게 되며 이제는 기존 어플리케이션도 앱과 같은 형식으로 배포를 하려하는 움직임까지 보이고 있다. 더군다나 이제는 MS Office 제품군에서도 내부 확장을 앱 형식으로 확장해서 사용할 수 있도록 지원해주고 있다. 예로 Outlook 2013에서 사용할 수 있는 앱을 개발하면 C/S와 Web에서 같은 앱을 사용할 수 있도록 지원해 주고 있다.

 

 이와 같이 앱 개발 전성시대와 함께 중요하게 대두된 것이 사용자 경험에서 중요한 변화가 시작이 되었다. 끊김없는 UI, 미려한 화면, 즉각적인 반응 등이 EndUser에게 선택되는 중요한 요점이 되었다. 프로그래머 입장에서는 비동기 프로그램 방식으로 위와 같은 형식으로 개발하여 사용자 경험에 대해 지원 해 줄 수 있다.

 

 .Net에서는 Async 개발 지원을 "Asynchronous Programming Pattern"을 통해 가이드를 해 주고 있다. 아래 리스트는 MS에서 가이드 해주는 패턴이다.

- Asynchronous Programming Model (APM)

Event-based Asynchronous Pattern (EAP)

- Task-based Asynchronous Pattern (TAP)

 (http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287)

 

아래는 간단하게 패턴 유형 별 코드를 비교해 보도록 하겠다.

 

Sync Pattern

public class MyClassAsync
{
    public int Read(byte[] bufferint offsetint count);
}

 

APM

public class MyClassAPM
{
    public IAsyncResult BeginRead(
        byte[] bufferint offsetint count,
        AsyncCallback callbackobject state);
    public int EndRead(IAsyncResult asyncResult);
}

 

EAP

public class MyClassEAP
{
    public void ReadAsync(byte[] bufferint offsetint count);
    public event ReadCompletedEventHandler ReadCompleted;
}

 

TAP - 추천 하는 방법 ( .Net framework 4.0 이상 지원 )

public class MyClassTAP
{
    public Task<int> ReadAsync(byte[] bufferint offsetint count);
}

 

여기에 추가적으로 .Net Framwork 에서는 async / await 패턴이 추가 되었다.

public class MyClassAsyncAWait {     public async ReadAsync(byte[] bufferint offsetint count);  }

 

 이와 같이 .Net framework 에서는 비동기 프로그래밍에 대해서 보다 쉽고, 개발자의 수고를 덜 수 있도록 점점 진화된 비동기 프로그래밍 개발을 지원해 주고 있다.

 

다음 포스트 각 패턴에 따르는 예제 코드를 하나 하나씩 짚어 보도록 하겠다.

+ Recent posts