c# 5.0 - 1

2015. 1. 23. 00:57IT Books/시작하세요 C# 프로그래밍

호출자 정보


c++에 있는 __LINE__, __FUNCTION__과 같은 매크로 상수가 없어서 아쉬울 때가 있는데

이를 대체하는 호출자 정보가 추가되었다.


다만 C# 답게 매크로가 아닌 특성과 선택적 매개변수로 구현된다.




호출자 정보 특성이 명시된 매개변수는 반드시 선택적 매개변수 형식이어야만 한다.


비동기 호출



메서드에 async가 지정되고 ReadAsync메서드가 await로 지정되어
이 메서드는 곧바로 반환되어 다른 일을 하게 되고 ReadAsync는 비동기로 실행된다.

그런데 async 예약어가 존재하는 이유는?
하위 호환성을 위해서다.
async가 지정되지 않으면 await는 단순히 식별자가 된다.


Task, Task<TResult> 타입

await와 함께 사용되는 메서드는 다음 형식을 가진다.

FileStream 타입
>> public Task<int> ReadAsync(byte[] buffer, int offset, int count);

WebClient 타입
>> public Task<string> DownloadStringTaskAsync(string address);

NetworkStream 타입
>> public Task<int> ReadAsync(byte[] buffer, int offset, int count);
>> public Task WriteAsync(byte[] buffer, int offset, int count);
즉 Async 메서드의 반환값이 전부 Task, Task<TResult> 유형이다.
이 타입들은 .NET 4.0부터 추가되어 있는 병렬 처리 라이브러리 (TPL : Task Parallel Library)에 속해 있다.


각각의 특징을 알 수 있는 예제 코드.


특히 이런 방식으로 일반 함수를 Task로 감싸고 await를 조합하게 되면 
모든 메서드들을 비동기로 동작하게 만들 수 있다.


Task.WhenAll + await를 조합하여 2개의 task가 완료되기를 기다리지 않고

곧바로 다음 작업을 수행한다.

await 다음 줄의 Console.WriteLine 코드는 컴파일러가 알아서 task3, task5가 모두 완료된 시점에

비동기로 실행되도록 변경해 준다.

'IT Books > 시작하세요 C# 프로그래밍' 카테고리의 다른 글

WinForm  (0) 2015.01.26
9장 - C# 4.0  (0) 2015.01.16
8장 - C# 3.0 - 3  (0) 2015.01.12
8장 - c# 3.0 - 2  (0) 2015.01.10
8장 - C# 3.0 - 1  (0) 2015.01.06