2019. 8. 11. 16:27 개발언어/C#

async, await란

반응형

출처 : http://www.csharpstudy.com/CSharp/CSharp-async-await.aspx

 

C# await - C# 프로그래밍 배우기 (Learn C# Programming)

C# 5.0 : async / await 키워드 C# 5.0부터 새로운 C# 키워드로 async와 await가 추가되었다. 이 키워드들은 기존의 비동기 프로그래밍 (asynchronous programming)을 보다 손쉽게 지원하기 위해 C# 5.0에 추가된 중요한 기능이다. C# async는 컴파일러에게 해당 메서드가 await를 가지고 있음을 알려주는 역활을 한다. async라고 표시된 메서드는 await를 1개 이상 가질 수 있는데, 하나도 없는

www.csharpstudy.com

async / await 는 C#  5.0부터 추가된 새로운 키워드이다.

이 키워드들은 기존의 비동기 프로그래밍을 좀 더 쉽게 작업할 수 있게 도와준다.

 

우선 Async 키워드는 해당 메소드가 Await을 지니고 있음을 컴파일러에게 알려주는 역할을 한다.

만약 async 키워드를 지닌 메소드가 내부에 await 를 단 한개도 지니고 있지 않은 경우에도 컴파일은 되지만 

warning을 발생시킨다.

 

일반적으로 Task, Task<T> 객체와 같이 사용되며 Task 의외의 클래스에도 사용이 가능하다.

[awaitable 클래스, GetAwaiter() 메소드를 지닌 클래스라면 이 역시 사용 가능하다.]

 

await는 Task, 혹은 awaitable 클래스의 객체가 완료될때까지 대기한다.

await는 기다리는 Task가 끝날때까지 기다렸다가 완료 후, await 바로 다음 실행문부터 실행을 계속한다.

 

await는 해당 키워드가 사용된 Task가 완료된 후의 로직을

Task가 시작한 Thread와 같은 Thread내에서 실행하는것을 보장한다.

 

비동기 메소드는 여러 return값을 가질 수 있다.

Task<T> / Task / void 를 가질 수 있는데 Task<T>의 경우 return 값이 T형이며 단순 Task의 경우 return 값이 없다.

void 의 경우 비동기 메소드가 이벤트 핸들러로 사용되는 경우이다.

[아마도 UI 이벤트 핸들러로 사용할 때???]

void 예제 코드: 

private async void Button_Click(object obj, EventArgs e)

{

    Task<int> accessTheWebTask = AccessTheWebAsync();

    string result = await accessTheWebTask;

    tbxAverageAge.Text = result;

}

 

async await 의 실행흐름

우선 비동기 메소드를 호출한다.

해당 메소드를 호출하면 우선 호출한 메소드(이하 호출자)의 Thread가 Cpu를 할당 받은 후 관련 로직이 실행된다.

해당 로직은 await를 만나기전까지 수행되며 await를 만나면 해당 await작업이 종료될때까지 대기하게 된다.

해당 await 작업은 호출자가 cpu를 할당받을 때마다 작업을 수행하며, await 작업이 종료되면 나머지 코드들을 수행한다.

즉 await 키워드는 호출자의 Thread 내에서 수행되며 별도의 Thread를 추가 생성하지 않습니다.

 

 

반응형

'개발언어 > C#' 카테고리의 다른 글

Thread와 Task  (0) 2021.06.20
CancellationTokenSource 과 CancellationToken  (0) 2019.11.29
ThreadStatic 과 ThreadLocal  (0) 2019.11.28
알아두면 어쩌다 쓸것같은 Attribute들-1  (0) 2019.09.05
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함