     /// Performs the APIRequest. On a successful request the `success` closure will be called with the an object of the ReturnType. On a failed request the `failure` closure will be called with the error. On a cancelled request the `cancellation` closure will be called.
     @discardableResult
     open func perform() -> APIRequestToken {
-        let task = URLSession.shared.dataTask(with: urlRequest(), completionHandler: urlRequestCallback)
-        task.resume()
-        return APIRequestToken(task: task)
-    }
-
+        return APIRequestToken(dataTask)
+    }
 }
 
 

    private var retain: Unmanaged<APIRequestToken>?
    private var observation: NSKeyValueObservation?

    public init(task: URLSessionDataTask) {
        self.task = task
        observation = task.observe(\.state) { [weak self] (task, change) in
            switch task.state {
            case .completed:

}

open class APIRequestToken {


    // MARK: - Properties
    open var state: APIRequestState {
