     }
     
     public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
+        defer {
+            fallthroughDelegate?.urlSession?(session, task: task, didCompleteWithError: error)
+        }
         guard let fr = self.taskMap[task.taskIdentifier] else {
             return
         }

        future.notify(response: resp)
        self.taskMap.removeValue(forKey: task.taskIdentifier)
    }
}

public class NSClient: NSObject, HTTPClient, URLSessionDataDelegate {
    
    public static let shared = { _ -> NSClient in
        let configuration = URLSessionConfiguration.default

        let newResp = HTTPBaseResponse(with: httpResp.statusCode, headers: httpResp.allHeaderFields as? [String: String] ?? [:], bodyStream: resp.bodyStream, request: resp.request)
        self.taskMap[dataTask.taskIdentifier] = (future, newResp)
        newResp.bodyStream?.open()
        guard let method = fallthroughDelegate?.urlSession(_:dataTask:didReceive:completionHandler:) else {
            completionHandler(.allow)
            return
        }
        method(session, dataTask, response, completionHandler)
    }
    
    public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
        defer {
            fallthroughDelegate?.urlSession?(session, dataTask: dataTask, didReceive: data)
        }
        guard let fr = self.taskMap[dataTask.taskIdentifier] else {
            return
        }
