> ## 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.

# 일반 비동기 작업 래퍼

> 일반 비동기 작업 래퍼

이 항목은 일반 비동기 작업 래퍼의 예를 제공합니다. 각 작업에 대해 수동으로 async 블록을 설정하고 [XAsyncRun](/reference/system/xasync/functions/xasyncrun)을 호출하는 대신, 이 과정을 단순화하는 `RunTask` 래퍼를 만드세요. 이 래퍼를 사용하면 작업 큐, 작업 콜백, 선택적 완료 콜백을 지정할 수 있습니다.

```c++ theme={null}
void RunTask(XTaskQueueHandle taskQueue,
    std::function<void()> workCallback,
    std::function<void()> completionCallback)
{
    struct RunTaskContext
    {
        std::function<void()> workCallback;
        std::function<void()> completionCallback;
    };

    RunTaskContext* context = new RunTaskContext();
    context->workCallback = workCallback;
    context->completionCallback = completionCallback;
    XAsyncBlock* async = new XAsyncBlock{};
    async->queue = taskQueue;
    async->context = context;
    async->callback = [](XAsyncBlock* async)
    {
        RunTaskContext* context = static_cast<RunTaskContext*>(async->context);
        context->completionCallback();
        delete context;
        delete async;
    };

    // Callback passed to XAsyncRun is the work callback
    XAsyncRun(async,
        [](XAsyncBlock* async)->HRESULT
        {
            RunTaskContext* context = static_cast<RunTaskContext*>(async->context);
            context->workCallback();
            return S_OK;
        });
}
```

앞의 샘플은 async 블록과 두 개의 콜백(작업 콜백 하나와 완료 콜백 하나)을 받는 함수를 구현합니다. 완료 콜백이 선택 사항이므로 작업 콜백만 받는 버전을 작성할 수 있습니다.

이 예에서는 async 블록을 설정하고, 컨텍스트 데이터를 설정하며, [XAsyncRun](/reference/system/xasync/functions/xasyncrun)을 호출하는 표준 패턴을 사용합니다. `RunTask`는 상용구 코드를 캡슐화하여 간단한 독립 실행형 작업 함수를 만듭니다. `std::function`을 사용하여 컨텍스트 매개 변수 없이 콜백에 간단한 데이터 캡처를 전달합니다.

```c++ theme={null}
RunTask(taskQueue,
    []()
    {
        // Work Callback
    },
    []()
    {
        // Completion Callback
    });
```

## 참고 API 문서

* [Xasync(API 콘텐츠)](/reference/system/xasync/xasync_members)
  * 함수
    * [XAsyncRun](/reference/system/xasync/functions/xasyncrun)
* [Xtaskqueue(API 콘텐츠)](/reference/system/xtaskqueue/xtaskqueue_members)

## 참고 항목

[비동기 프로그래밍 개요](/build/core-features/common/async/async-toc)
[XAsync](/reference/system/xasync/xasync_members)
[XTaskQueue](/reference/system/xtaskqueue/xtaskqueue_members)
