---
title: "setCancelHandler(qos:flags:handler:)"
framework: dispatch
role: symbol
role_heading: Instance Method
path: "dispatch/dispatchsourceprotocol/setcancelhandler(qos:flags:handler:)"
---

# setCancelHandler(qos:flags:handler:)

Sets the cancellation handler block for the dispatch source with the specified quality-of-service class and work item options.

## Declaration

```swift
func setCancelHandler(qos: DispatchQoS = .unspecified, flags: DispatchWorkItemFlags = [], handler: Self.DispatchSourceHandler?)
```

## Parameters

- `qos`: The quality-of-service to apply to the handler block.
- `flags`: Configuration flags for the work item. For a list of possible values, see doc://com.apple.dispatch/documentation/Dispatch/DispatchWorkItemFlags.
- `handler`: The event handler block to submit to the source’s target queue.

## Discussion

Discussion The cancellation handler (if specified) is submitted to the source’s target queue in response to a call to a call to the cancel() method once the system has released all references to the source’s underlying handle and the source’s event handler block has returned. To safely close a file descriptor or destroy a Mach port, a cancellation handler is required for that descriptor or port. Closing the descriptor or port before the cancellation handler runs can result in a race condition. If a new descriptor is allocated with the same value as the recently closed descriptor while the source’s event handler is still running, the event handler may read/write data using the wrong descriptor.

## See Also

### Canceling a Dispatch Source

- [cancel()](dispatch/dispatchsourceprotocol/cancel().md)
- [isCancelled](dispatch/dispatchsourceprotocol/iscancelled.md)
- [setCancelHandler(handler:)](dispatch/dispatchsourceprotocol/setcancelhandler(handler:).md)
