                                    with request: URLRequest) -> DeferredURLSessionTask<(URL, FileHandle, HTTPURLResponse)>
   {
     let tbd = DeferredDownloadTask<(URL, FileHandle, HTTPURLResponse)>(qos: qos)
-
-    let task = self.downloadTask(with: request, completionHandler: downloadCompletion(tbd))
-
-    tbd.task = task
+    tbd.urlSessionTask = downloadTask(with: request, completionHandler: downloadCompletion(tbd))
     return tbd
   }
 

  @discardableResult
  override public func cancel(_ reason: String = "") -> Bool
  {
    guard !self.isDetermined, let task = sessionTask
    else { return super.cancel(reason) }

    // try to propagate the cancellation upstream
    task.cancel()
    return task.state == .canceling
  }

  public fileprivate(set) var task: URLSessionTask? {
    get {
      // is this thread-safe, or is a capture-and-return necessary?
      return sessionTask
    }
    set {
      sessionTask = newValue
    }
  }

  public override func enqueue(qos: DispatchQoS? = nil, task: @escaping (Determined<Value>) -> Void)
  {
    self.task?.resume()
    self.beginExecution()
    super.enqueue(qos: qos, task: task)
  }
}

                                 with request: URLRequest, fromFile fileURL: URL) -> DeferredURLSessionTask<(Data, HTTPURLResponse)>
  {
    let tbd = DeferredURLSessionTask<(Data, HTTPURLResponse)>(qos: qos)
    tbd.urlSessionTask = uploadTask(with: request, fromFile: fileURL, completionHandler: uploadCompletion(tbd))
    return tbd
  }
}
