---
title: "downloadTask(withResumeData:completionHandler:)"
framework: foundation
role: symbol
role_heading: Instance Method
path: "foundation/urlsession/downloadtask(withresumedata:completionhandler:)"
---

# downloadTask(withResumeData:completionHandler:)

Creates a download task to resume a previously canceled or failed download and calls a handler upon completion.

## Declaration

```swift
func downloadTask(withResumeData resumeData: Data, completionHandler: @escaping @Sendable (URL?, URLResponse?, (any Error)?) -> Void) -> URLSessionDownloadTask
```

## Parameters

- `resumeData`: A data object that provides the data necessary to resume the download.
- `completionHandler`: The completion handler to call when the load request is complete. This handler is executed on the delegate queue. If you pass nil, only the session delegate methods are called when the task completes, making this method equivalent to the doc://com.apple.foundation/documentation/Foundation/URLSession/downloadTask(withResumeData:) method.

## Mentioned in

Pausing and resuming downloads

## Return Value

Return Value The new session download task.

## Discussion

Discussion By using a completion handler, the task bypasses calls to delegate methods for response and data delivery, and instead provides any resulting data, response, or error inside the completion handler. Delegate methods for handling authentication challenges, however, are still called. You should pass a nil completion handler only when creating tasks in sessions whose delegates include a urlSession(_:downloadTask:didFinishDownloadingTo:) method. Your app can obtain a resumeData object in two ways: If your app cancels an existing transfer by calling cancel(byProducingResumeData:), the session object passes a resumeData object to the completion handler that you provided in that call. If a transfer fails, the session object provides an NSError object either to its delegate or to the task’s completion handler. In that object, the NSURLSessionDownloadTaskResumeData key in the userInfo dictionary contains a resumeData object. After you create the task, you must start it by calling its resume() method. If the request completes successfully, the location parameter of the completion handler block contains the location of the temporary file, and the error parameter is nil. If the request fails, the location parameter is nil and the error parameter contain information about the failure. If a response from the server is received, regardless of whether the request completes successfully or fails, the response parameter contains that information. note: A download can be resumed only if it is an HTTP or HTTPS GET request, and only if the remote server supports byte-range requests (with the Range header) and provides the ETag or Last-Modified header in its responses. A download may also restart if the file on the server has been modified, or if the temporary file has been deleted because of low disk space.

## See Also

### Adding download tasks to a session

- [downloadTask(with:)](foundation/urlsession/downloadtask(with:)-1onj.md)
- [downloadTask(with:completionHandler:)](foundation/urlsession/downloadtask(with:completionhandler:)-7cuje.md)
- [downloadTask(with:)](foundation/urlsession/downloadtask(with:)-3fb7s.md)
- [downloadTask(with:completionHandler:)](foundation/urlsession/downloadtask(with:completionhandler:)-4a84s.md)
- [downloadTask(withResumeData:)](foundation/urlsession/downloadtask(withresumedata:).md)
- [URLSessionDownloadTask](foundation/urlsessiondownloadtask.md)
- [URLSessionDownloadDelegate](foundation/urlsessiondownloaddelegate.md)
