                 }
                 
                 let model = try decoder.decode(Model.self, from: data)
-                completion(.success(response, model))
+                self.queue.async { handler(.success(response, model)) }
             } catch {
-                completion(.failure(error))
+                self.queue.async { handler(.failure(error)) }
             }
         }.resume()
     }

        
        self.configuration = configuration
        self.session = URLSession(configuration: configuration)
        
        dumpAllConfigurationHeaders()
    }
    
    public init(configuration: URLSessionConfiguration) {
        configuration.httpAdditionalHeaders = Constants.defaultHeaders
        
        self.configuration = configuration
        self.session = URLSession(configuration: configuration)
        
        dumpAllConfigurationHeaders()
    }

    }
    
    // MARK: - Initialiser
    public init(appName: String? = nil,
                headers: [AnyHashable: Any]? = nil,
                timeout: TimeInterval = 60,
                queue: DispatchQueue = .main) {
        let configuration: URLSessionConfiguration = .ephemeral
        configuration.httpAdditionalHeaders = Constants.defaultHeaders
        configuration.userAgent(using: appName)
