     // MARK: Private - Stream Implementation
 
     private func stream(_ streamable: StreamRequest.Streamable) -> StreamRequest {
-        var task: URLSessionStreamTask!
-
-        switch streamable {
-        case let .stream(hostName, port):
-            queue.sync { task = self.session.streamTask(withHostName: hostName, port: port) }
-        case .netService(let netService):
-            queue.sync { task = self.session.streamTask(with: netService) }
-        }
-
+        let task = streamable.task(session: session, adapter: adapter, queue: queue)
         let request = StreamRequest(session: session, task: task, originalTask: streamable)
 
         delegate[request.delegate.task] = request

    /// - returns: The created `DataRequest`.
    open func request(_ urlRequest: URLRequestConvertible) -> DataRequest {
        let originalRequest = urlRequest.urlRequest
        let adaptedRequest = originalRequest.adapt(using: adapter)

        var task: URLSessionDataTask!
        queue.sync { task = self.session.dataTask(with: adaptedRequest) }

        let originalTask = DataRequest.Requestable(urlRequest: originalRequest)
        let request = DataRequest(session: session, task: task, originalTask: originalTask)

        delegate[request.delegate.task] = request

        to destination: DownloadRequest.DownloadFileDestination)
        -> DownloadRequest
    {
        let task = downloadable.task(session: session, adapter: adapter, queue: queue)
        let request = DownloadRequest(session: session, task: task, originalTask: downloadable)

        request.downloadDelegate.downloadTaskDidFinishDownloadingToURL = { session, task, URL in
