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

# Clean up task queue example

> Clean up task queue example

This topic provides an example of how to clean up a task queue when it's no longer needed to avoid leaking resources. However, a task queue can't just immediately be released. It must first be terminated, flushed to
ensure that anything enqueued to it has been run, and then released.

The [terminate call](/reference/system/xtaskqueue/functions/xtaskqueueterminate) can be set to wait or return
immediately. If a callback isn't waiting, it can optionally be specified
to be notified when the termination completely finishes. If there are
any [manual ports](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode), they must continue to be dispatched until
the [dispatch function](/reference/system/xtaskqueue/functions/xtaskqueuedispatch) returns.

```c++ theme={null}
XTaskQueueTerminate(taskQueue, false, nullptr, nullptr);
bool result;
do
{
    result = XTaskQueueDispatch(taskQueue, XTaskQueuePort::Completion, INFINITE);
} while (result == true);
XTaskQueueCloseHandle(taskQueue);
```

This example terminates the task queue but doesn't wait by using the
[XTaskQueueTerminate](/reference/system/xtaskqueue/functions/xtaskqueueterminate) wait parameter.
The `terminate` call adds one callback to each port to detect when the queue
is emptied. To account for this and any previously enqueued callbacks,
`dispatch` is continually called until it returns `false`.

## Reference API documentation

* [XTaskQueue (API contents)](/reference/system/xtaskqueue/xtaskqueue_members)
  * Functions
    * [xtaskqueueterminate](/reference/system/xtaskqueue/functions/xtaskqueueterminate)
    * [xtaskqueuedispatch](/reference/system/xtaskqueue/functions/xtaskqueuedispatch)

## See also

[XTaskQueue library overview](/build/core-features/common/async/async-libraries/async-library-xtaskqueue)

[Create task queue (example)](/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue)

[Dispatch task queue (example)](/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-dispatch-task-queue)

[Designing the task queue](/build/core-features/common/async/async-task-queue-design)

[XTaskQueue](/reference/system/xtaskqueue/xtaskqueue_members)


## Related topics

- [Create task queue example](/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue.md)
- [Dispatch task queue example](/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-dispatch-task-queue.md)
- [XAsync libraries for asynchronous task programming](/build/core-features/common/async/async-libraries/index.md)
- [Set up async task example](/build/core-features/common/async/async-libraries/async-library-xasync-example-setup-async-task.md)
- [XTaskQueueTerminate](/reference/system/xtaskqueue/functions/xtaskqueueterminate.md)
