닷넷과 WINRT의 비동기 패턴 훈스닷넷 WINDOWS 8 시삽 윤병걸
닷넷과 WINRT의 비동기 패턴
훈스닷넷
WINDOWS 8 시삽
윤병걸
WINDOWS 8 PLATFORM
비동기 프로그래밍 모델
.NET Framework
•Task
•Task<T>
WinRT
• IAsyncOperation<T>
• IAsyncAction
LANGUAGE PROJECTIONS
TASK, TASK<T>
• TASKCOMPLETIONSOURCE<TRESULT>
• CONFIGUREAWAIT()
• CANCELLATIONTOKENSOURCE
• WHENANY(), WHENALL()
• WAITALL(), WAITANY()
• ETC…
TASKCOMPLETIONSOURCE<TRESULT>
• TASK를 만드는 일반적인 매커니즘
• SETERROR ()
• SETCANCEL()
• SETRESULT()
WinRTSynchronizationContext
OnCompleted(Action continuation)
Post()
Continuation
delegate
UI Thread
Message Pump Message Queue
Async
CONFIGUREAWAIT(TRUE OR FALSE)
• 컴파일러의 마샬링 작업 수행여부를 결정
• TRUE : (DEFAULT) 마샬링 작업 수행
• FALSE : 마샬링 작업 수행하지 않음
CANCELLATIONTOKENSOURCE
• 현재 수행중인 비동기 작업에 취소요청
• TOKEN을 부여할 때마다 새로운 복사본을 생성
• 작업을 취소하는 경우 대리자에서 THROWIFCANCELLATIONREQUESTED를 호출하는 것을
권장.
IPROGRESS
• TASK에서 진행률을 표시하는데 사용
COMBINATORS
• WHENALL, WHENANY
• WAITALL, WAITANY
• CONTINUEWITH
WINRT 비동기 기본 형식
ASYNCINFO.RUN
• TASK를 IASYNCOPERATION형으로 변환
• 비동기 작업에 취소를 지원할 수 있음
• 비동기 작업에 진행률 표시를 지원할 수 있음
IASYNCOPERATION 구현
ASASYNCOPERATION의 구현
STATUS 비교
From TaskStatus To AsyncStatus
RanToCompletion Completed
Faulted Error
Canceled Canceled
All other values & cancellation was requested Canceled
All other values & cancellation was not requested Started
IAsyncoperation
Task
WinRT용
라이브러리를 제작
한다면
IAsyncOperation타입을 반환해야 함.
IAsyncOperation보다 많은 제공.
AsAsyncOperation()
AsTask()
REFERENCE
• HTTP://BLOGS.MSDN.COM/B/WINDOWSAPPDEV/ARCHIVE/2012/04/24/DIVING-DEEP-WITH-
WINRT-AND-AWAIT.ASPX
• HTTP://BLOGS.MSDN.COM/B/WINDOWSAPPDEV/ARCHIVE/2012/06/14/EXPOSING-NET-TASKS-AS-WINRT-ASYNCHRONOUS-OPERATIONS.ASPX
• HTTP://MSDN.MICROSOFT.COM/EN-US/LIBRARY/DD997364.ASPX
• HTTP://MSDN.MICROSOFT.COM/EN-US/MAGAZINE/FF959203.ASPX
QUESTION
THANK YOU