[C#] - 비동기 처리 : async 와 await
○ 비동기 처리 : async 와 await |
||||||
- 비동기 처리 : async, await 비동기로 수행될 메소드 작성 시 핵심 키워드 동기 메소드처럼 직관적으로 작성 가능, 코드 매우 간결해지고 편리해짐 1. 비동기 수행하는 메소드는 async keyword 를 수식해야 한다 2. async 수식된 메소드는 반환형을 반드시 void, Task, Task<T> 중 하나여야 한다 -> ex) Task<int> : 비동기 처리 후 반환형 데이터가 int형일 경우 void : 비동기 메소드가 이벤트 핸들러에 사용될 때 Task : 비동기 메소드가 수행 후 반환되는 데이터가 없을 때 Task<T> : 비동기 메소드가 반환되는 데이터 타입이 있을 때, T에 반환형을 명시해야 한다 3. 약속에 의해 메소드의 접미사는 async를 붙여야 한다 4. await 은 1개 이상 포함 가능(반드시 있어야 하는건 아니다) await 은 async 메소드에서만 사용 가능하다 -> await 을 만나면 해당 지점에서 작업이 중단되고, 제어는 비동기 메소드 호출자에게 넘어가며, 컴파일러에게 비동기 작업이 끝나기 전에는 현재 지점 이후로 진행할 수 없음을 알린다 이해를 위한 참조 : https://devluna.blogspot.com/2015/09/c-async-await.html
1. await이 없는 PrintStringAsync()가 먼저 실행되고 2. await이 없어서 같이 돌고 있는 PrintNumberAsync2()가 3초뒤에 결과값을 내고 3. await이 있는 PrintNumberAsync()가 5초뒤에 결과값을 낸다
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | static void DoIndependentWork() { Console.WriteLine("working..."); } static async Task<int> AccessTheWebAsync() { using (HttpClient client = new HttpClient()) { Task<string> getStringTask = client.GetStringAsync ("https://docs.microsoft.com"); DoIndependentWork(); string urlContents = await getStringTask; return urlContents.Length; } } AccessTheWebAsync();
Console.WriteLine("URL 길이 : " + AccessTheWebAsync().Result); | cs |
'C#' 카테고리의 다른 글
[C#] - 비동기 처리 : async 메소드가 아닌 경우 비동기 처리 (0) | 2019.04.09 |
---|---|
[C#] - 비동기 처리 : task (0) | 2019.04.09 |
[C#] - 이벤트(event), 이벤트 핸들러(EventHandler) (0) | 2019.04.08 |
[C#] - 델리게이트(delegate), 멀티캐스트 델리게이트 (0) | 2019.04.08 |
[C#] - 클래스 배열의 변수과 속성, 인덱스 비교 (0) | 2019.04.08 |