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

# Clean up task queue

> Shows how to terminate a task queue with XTaskQueueTerminate, keep dispatching manual ports until XTaskQueueDispatch returns false, then close the handle.

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](https://docs.xbox.com/reference/system/xtaskqueue/functions/xtaskqueueterminate.md) 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](https://docs.xbox.com/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode.md), they must continue to be dispatched until
the [dispatch function](https://docs.xbox.com/reference/system/xtaskqueue/functions/xtaskqueuedispatch.md) 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](https://docs.xbox.com/reference/system/xtaskqueue/functions/xtaskqueueterminate.md) 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)](https://docs.xbox.com/reference/system/xtaskqueue/xtaskqueue_members.md)
  * Functions
    * [xtaskqueueterminate](https://docs.xbox.com/reference/system/xtaskqueue/functions/xtaskqueueterminate.md)
    * [xtaskqueuedispatch](https://docs.xbox.com/reference/system/xtaskqueue/functions/xtaskqueuedispatch.md)

## See also

[XTaskQueue library overview](https://docs.xbox.com/build/core-features/common/async/async-libraries/async-library-xtaskqueue.md)

[Create task queue (example)](https://docs.xbox.com/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue.md)

[Dispatch task queue (example)](https://docs.xbox.com/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-dispatch-task-queue.md)

[Designing the task queue](https://docs.xbox.com/build/core-features/common/async/async-task-queue-design.md)

[XTaskQueue](https://docs.xbox.com/reference/system/xtaskqueue/xtaskqueue_members.md)


## Related topics

- [Create task queue](https://docs.xbox.com/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue.md)
- [Dispatch task queue](https://docs.xbox.com/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-dispatch-task-queue.md)
- [XTaskQueueTerminate](https://docs.xbox.com/reference/system/xtaskqueue/functions/xtaskqueueterminate.md)
- [XTaskQueueDispatch](https://docs.xbox.com/reference/system/xtaskqueue/functions/xtaskqueuedispatch.md)
- [XAsync libraries for asynchronous task programming](https://docs.xbox.com/build/core-features/common/async/async-libraries/index.md)
