     }
   }
   
+  /// 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))) }

  /**
   A Promise is initialized with the task.
   The task should call the completions handler with the result when it's done.
   The task will also be passed an observable that indicates the current stream state.  
   If the stream is terminated, the task should cancel whatever it's doing (if possible).  
   After a stream has been terminated, calling the completion handler will do nothing.
   
   - parameter task: The task that should complete the future
   
