본문 바로가기

Thinking/Study

Professional C# 5.0 and .NET 4.5.1

728x90

chapter 13. Asynchronous Programming


※ Asynchronous Pattern

- asynchronous pattern : .NET 1.0 부터. delegate(델리게이트) 타입으로도 사용될 수 있다.

BeginXXX, EndXXX 메소드를 정의한다. BeginXXX 메소드는 동기 메소드의 모든 입력 인자들을 가지고, EndXXX 메소드는 출력 인자와 결과를 반환하는 반환 타입을 가진다. BeginXXX 메소드는 또한 동기 메소드가 완료될때 호출되는 델리게이트를 가지는 AsyncCallback 파라미터를 정의한다. BeginXXX 메소드는 IAsyncResult 를 반환하는데, 어떤 호출이 완료되었는지 확인하기 위해 폴링(polling) 하는데 사용된다.


- event-based asynchronous pattern : .NET 2.0 에서 소개. asynchronous componet pattern 이라고도 함.

접미어 "Async" 를 가진 메소드를 정의한다. 비동기 메소드가 완료될때 호출되는 델리게이트를 정의하는 대신, 이벤트가 정의된다.


- task-based asynchronous pattern(TAP) : .NET 4.0 에서 TPL(Task Parallel Library) 에서 소개된 Task 를 이용. C# 5.0 에서 async 기능을 사용.

Task 타입을 반환하는 접미어 "Async" 메소드를 정의한다.


※ Asynchronous Programming

- Task 를 생성

Task<> 클래스를 반환하고 접미어를 Async 를 붙여서 메소드를 정의한다.

ex) 

Task<string> GreetingAsync(string name)

{

return Task.Run<string>(() =>

{

return Greeting(name);

});

}


- Asynchronous 메소드를 호출

반환될 task 에 await 키워드를 사용해서 비동기(asynchronous) 메소드를 호출한다. await 키워드는 메소드가 async 수정자(modifier) 로 정의되어야 한다.

ex)

private async static void CallerWithAsync()

{

string result = await GreetingAsync("Stephanie");

Console.WriteLine(result);

}


- Continuation with Tasks

Task 클래스의 ContinueWith 메소드를 이용해서, 완료된 작업(task) 의 Result 프로퍼티에 접근해서 결과값을 접근한다.

ex)

private static void CallerWithContinuationTask()

{

Task<string> t1 = GreetingAsync("Stephanie");

t1.ContinueWith(t =>

{

string result = t.Result;

Console.WriteLine(result);

});

}

'Thinking > Study' 카테고리의 다른 글

패턴 정리  (0) 2015.08.24
python 출력 테스트  (0) 2015.08.21
The C# Programming Language, 4th Edtion  (0) 2015.05.01
요새 읽고 있는 iOS 개발 관련 책들 정리  (0) 2014.12.29
Objective-C 에서 Properties, iVar 설명  (0) 2014.11.04