Task.ContinueWith
Task 기반 비 동기 작업을 수행하다가 보면 순차적으로 수행해야 하는 작업이 있을 수 있다. 그럴때마다 await 키워드로 다시 비동기를 실행하지 않고 ContinueWith를 사용하면 순차적인 비 동기를 수행 할 수 있다. 아래 구문을 살펴 보자.
public async void TAP_AsyncAwait_TestMethod2() { //.Net framework 4.5에 추가된 메소드로 //Task.Factory.StartNew 래핑한다. var returnValue = await Task.Run(() => { /* Something */ return 10; }) //10을 리턴하면 아래 구문을 수행 한다. .ContinueWith(_result => { return _result.Result + 100; }) //110을 리턴하면 아래 구문을 수행 한다. .ContinueWith(_return => { Thread.Sleep(1000); return _return.Result + 200; }) //1초 후 310을 리턴하면 아래 구문을 수행 한다. //결과 값을 String으로 반환 한다. .ContinueWith(_return => { return _return.Result.ToString(); }); Console.WriteLine(returnValue); }
[코드1] ContinueWith로 비 동기 순차 실행
이와 같이 사용하여 순차적인 비 동기 실행을 구현하여 await를 남발하지 않도록 하면 될 것이다.
소스 코드 자체에 주석과 직관적인 코딩으로 충분히 파악이 가능할 것으로 예상하므로 별도의 설명을 생략하도록 하겠습니다. 포스트의 내용이 장황한 설명 보다는 주석과 소스코드 자체 만으로도 이해할 수 있도록 하기 위해 노력하였습니다.. 실제 개발에서도 필요한 소스는 단순히 Copy & Paste 만으로도 사용할 수 있습니다. 그리고 주석을 이용해 nDoc이나 별도의 자동 Document 제작 유틸로 API 문서를 만드는 데에도 도움이 되었으면 한다. ing™ |
'.Net Framework' 카테고리의 다른 글
[Delegate] 델리게이트를 이용한 (비 동기)실행 - invoke, beinginvoke, endinvoke (0) | 2013.03.12 |
---|---|
[C# Snippet]Task-based Asynchronous Pattern Task.Yield (0) | 2013.03.11 |
[C# Snippet]Task-based Asynchronous Pattern Task.Run 메소드 (0) | 2013.03.08 |
C# Task-based Asynchronous Pattern - TAP(2) Async #8 (0) | 2013.03.08 |
[Utility]Sysinternals Utilities Index (0) | 2013.03.04 |