다음을 통해 공유


취소가능성 설정 예제

이 항목에서는 사용자 지정 공급자 콜백에서 취소가능성을 설정하는 방법에 관한 예제를 제공합니다. XAsyncRun으로 시작되는 기본 비동기 메서드는 취소할 수 없습니다. 취소가능성 지원은 사용자 지정 공급자를 사용하는 경우 수동으로 추가할 수 있습니다. 지원이 추가된 후에 XAsyncCancelCancel 케이스를 트리거합니다.

// Provider callback.
[](XAsyncOp op, const XAsyncProviderData* providerData)
{
    switch(op)
    {
        case XAsyncOp::DoWork:
        {
            bool canceled = false;
            while (true)
            {
                DWORD waitResult = WaitForSingleObject(callData->cancelEvent, 0);
                if (waitResult != WAIT_TIMEOUT)
                {
                    canceled = true;
                    break;
                }

                // Continue doing normal work. Should break if completed.
            }

            if (canceled)
            {
                XAsyncComplete(providerData->async, E_ABORT, 0);
            }
            else
            {
                XAsyncComplete(providerData->async, S_OK, 0);
            }

            break;
        }
        
        case XAsyncOp::Cancel:
            SetEvent(callData->cancelEvent);
            break;

        // Other cases.
    }
}

공급자 사례에서는 Windows Event를 사용하여 취소가능성 지원이 추가됩니다. Cancel 케이스가 호출되면 DoWork 케이스가 E_ABORT 상태에서 XAsyncComplete에 대한 호출로 종료됩니다. 취소를 알리는 데 모든 메서드를 사용할 수 있습니다. 그러나 이벤트는 타게팅할 수 있는 모든 Microsoft GDK(게임 개발 키트) 플랫폼에서 지원되는 취소를 알리는 간단한 방법입니다.

Cancel 케이스를 트리거하려면 작업에 대한 비동기 블록으로 XAsyncCancel을(를) 호출합니다.

XAsyncCancel(async);

참고 항목

XAsyncProvider 라이브러리 개요

사용자 지정 공급자 설정(예제)

호출 메서드 설정(예제)

반환 데이터 설정(예제)

XAsyncProvider