> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 취소 가능성 설정 예제

> 취소 가능성 설정 예제

이 항목은 사용자 지정 공급자 콜백에서 취소 가능성을 설정하는 방법의 예를 제공합니다. [XAsyncRun](/reference/system/xasync/functions/xasyncrun)으로 시작된 기본 비동기 메서드는 취소할 수 없습니다. 사용자 지정 공급자를 사용할 때 취소 가능성 지원을 수동으로 추가할 수 있습니다. 지원이 추가된 후에는 [XAsyncCancel](/reference/system/xasync/functions/xasynccancel)이 `Cancel` 사례를 트리거합니다.

```c++ theme={null}
// 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 이벤트를 사용하여 취소 가능성 지원이 추가됩니다. `Cancel` 사례가 호출되면 이벤트가 설정되며, `DoWork` 사례는 `E_ABORT` 상태와 함께 [XAsyncComplete](/reference/system/xasyncprovider/functions/xasynccomplete) 호출로 종료됩니다. 취소를 알리기 위해 어떤 방법이든 사용할 수 있습니다. 그러나 이벤트는 대상으로 지정할 수 있는 모든 Microsoft Game Development Kit(GDK) 플랫폼에서 지원되는 취소 신호를 알리는 간단한 방법입니다.

`Cancel` 사례를 트리거하려면 다음과 같이 작업의 async 블록과 함께 `XAsyncCancel`을 호출합니다.

```c++ theme={null}
XAsyncCancel(async);
```

## 참고 API 문서

* [XAsyncProvider(API 콘텐츠)](/reference/system/xasyncprovider/xasyncprovider_members)
  * 함수
    * [XAsyncComplete](/reference/system/xasyncprovider/functions/xasynccomplete)
* [xasync(API 콘텐츠)](/reference/system/xasync/xasync_members)
  * 함수
    * [XAsyncRun](/reference/system/xasync/functions/xasyncrun)
    * [XAsyncCancel](/reference/system/xasync/functions/xasynccancel)

## 참고 항목

[XAsyncProvider 라이브러리 개요](/build/core-features/common/async/async-libraries/async-library-xasyncprovider)

[사용자 지정 공급자 설정(예제)](/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-custom-provider)

[호출 메서드 설정(예제)](/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-invocation-methods)

[반환 데이터 설정(예제)](/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-return-data)

[XAsyncProvider](/reference/system/xasyncprovider/xasyncprovider_members)


## Related topics

- [호출 메서드 설정 예제](/ko/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-invocation-methods.md)
- [반환 데이터 설정 예제](/ko/build/core-features/common/async/async-libraries/async-library-xasyncprovider-example-setup-return-data.md)
- [XAsyncProvider 라이브러리 개요](/ko/build/core-features/common/async/async-libraries/async-library-xasyncprovider.md)
- [비동기 작업 프로그래밍을 위한 XAsync 라이브러리](/ko/build/core-features/common/async/async-libraries/index.md)
- [XAsyncComplete](/ko/reference/system/xasyncprovider/functions/xasynccomplete.md)
