'await' keyword

2018. 10. 13. 01:42 from Language/C#

await awaitable method return type

async await로 method를 만들면 Main Thread와 Sub Thread가 생성됨.


Main Thread는 await keyword를 만나면 async await method를 탈출함. Sub Thread는 await 다음에 나오는 awaitable method를 기다린다. 이때 awaitable method는 반환인자가 있으면 Task<Tresult> Method name (value) 이렇게 선언해야 한다. 


awaitable method를 기다린 다음 결과를 받을 때에는 아래처럼 반환인자 형태를 그대로 받아주면 된다. 

(DownloadWebSite declare : Task < WebsiteDateModel > DownloadWebSite (string site) )


private async Task RunDowloadAsync()

{

List <string> websites = PrepData();


foreach (string site in websites)

{

WebsiteDateModel results = await Task.Run( ( ) => DownloadWebSite (site) );

}

}



아래는 병렬적으로 여러개 파일을 받는 경우로써 Task.Run으로 awaitable method를 await로 기다리지 않고(기다리지 않았기 때문에 Task의 반환인자를 받는 것이 아니라 Task를 반환 받는다), 모든 Task가 완료되는 것을 await로 기다린다(이때는 기다렸다가 받는 것이므로 다시 Task의 반환인자를 반환 받는다).


private async Task RunDownload ParallelAsync()

{

List <string> websites = PrepData();


// 반환인자를 WeibsiteDateModel로 갖는 Task를 List로 만든다.

List <Task<WebsiteDateModel>> tasks = new List <Task<WebsiteDatemodel>>( );


foreach (string site in websites)

{

tasks.Add(Task.Run( ( ) => DownloadWebsite(site)));

}


var results = await Task.WhenAll(tasks);


foreach (var item in results)

{

ReportWeibsiteInfo(item);

}

}





Task Run ( ( ) => sync method )



'Language > C#' 카테고리의 다른 글

public, private, protected, internal keyword  (0) 2018.10.24
async await 사용시 조심해야 할 점  (0) 2018.10.14
Object Oriented Robot Programming  (0) 2018.10.14
C# 'sealeld'  (0) 2018.10.09
메타데이터란?  (0) 2018.09.22
Posted by 나무길 :