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 문서를 만드는 데에도 도움이 되었으면 한다. 
※ DOC에 대한 프로그램 정보 Util link

ing™       





+ Recent posts