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

# XTaskQueueDuplicateHandle

> XTaskQueueDuplicateHandle

# XTaskQueueDuplicateHandle

Duplica un objeto XTaskQueueHandle.

## Sintaxis

```cpp theme={null}
HRESULT XTaskQueueDuplicateHandle(  
         XTaskQueueHandle queueHandle,  
         XTaskQueueHandle* duplicatedHandle  
)  
```

### Parámetros

*queueHandle*   \_In\_\
Tipo: XTaskQueueHandle

La cola a la que se hará referencia.

*duplicatedHandle*   \_Out\_\
Tipo: XTaskQueueHandle\*

El identificador de cola duplicado.

### Valor devuelto

Tipo: HRESULT

Código de error o de éxito HRESULT.

## Comentarios

Use [XTaskQueueCloseHandle](/reference/system/xtaskqueue/functions/xtaskqueueclosehandle) para cerrar el objeto **XTaskQueueHandle**.

En el ejemplo siguiente se muestra cómo duplicar un identificador de cola de tareas. Si tiene trabajo de larga duración, es posible que quiera duplicar el identificador de la cola de tareas mientras dure ese trabajo. Esto evita que cualquiera que llame a la función [XTaskQueueCloseHandle](/reference/system/xtaskqueue/functions/xtaskqueueclosehandle) cierre la cola mientras todavía la necesita.

```cpp theme={null}
void DuplicatingTaskQueueHandle()
{
    XTaskQueueHandle queue;

    HRESULT hr = XTaskQueueCreate(
        XTaskQueueDispatchMode::Manual, 
        XTaskQueueDispatchMode::Manual, 
        &queue);

    if (FAILED(hr))
    {
        printf("failed to create task queue: 0x%x\r\n", hr);
        return;
    }

    class LongRunningWork
    {
    public:
        HRESULT Initialize(XTaskQueueHandle queue)
        {
            return XTaskQueueDuplicateHandle(queue, &m_queue);
        }
        
        ~LongRunningWork()
        {
            if (m_queue != nullptr)
            {
                XTaskQueueCloseHandle(m_queue);
            }
        }

    private:
        XTaskQueueHandle m_queue = nullptr;
    };

    LongRunningWork work;
    hr = work.Initialize(queue);
    
    // Note that LongRunningWork's queue handle is still valid.
    XTaskQueueCloseHandle(queue);

    if (FAILED(hr))
    {
        printf("Failed to duplicate queue handle: 0x%x\r\n", hr);
    }
}
```

## Requisitos

**Encabezado:** XTaskQueue.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatibles:** Windows, consolas de la familia XBOX One y consolas XBOX Series

## Consulte también

[Miembros de XTaskQueue](/reference/system/xtaskqueue/xtaskqueue_members)\
[Modelo de programación asincrónica](/build/core-features/common/async/async-programming-model)\
[Diseño de la cola de tareas asincrónicas](/build/core-features/common/async/async-task-queue-design)


## Related topics

- [XblGetAsyncQueue](/es/reference/live/xsapi-c/xbox_live_global_c/functions/xblgetasyncqueue.md)
- [XTaskQueue](/es/reference/system/xtaskqueue/xtaskqueue_members.md)
- [Diseño de colas de tareas asincrónicas](/es/build/core-features/common/async/async-task-queue-design.md)
- [XTaskQueueCloseHandle](/es/reference/system/xtaskqueue/functions/xtaskqueueclosehandle.md)
- [Información general de la biblioteca XTaskQueue](/es/build/core-features/common/async/async-libraries/async-library-xtaskqueue.md)
