     }
   }
   
+  /// Internal init for creating down stream promises
   override init() {
     super.init()
   }

    self.lock = self
    var complete = false
    task(self.state) { [weak self] completion in
      guard let me = self, !complete else { return }
      complete = true
      completion
        .onFailure{ me.push(value: .terminate(reason: .error($0))) }

  }
  
  func cancelTask() {
    guard isActive else { return }
    guard task == nil else {
      push(value: .terminate(reason: .cancelled))
      lock = nil
      return
    }
    cancelParent?.cancelTask()
  }
  
  /// This will cancel the promise, including any task associated with it.  If the stream is not active, this does nothing.
  public func cancel() {
    self.cancelTask()
  }
