abort(isReturn) {
    this.aborted = true;

    // Grab the last task in the flow and return, this task will be responsible
    // for calling `transaction.end`.
    if (isReturn) {
      return this.tasks[this.tasks.length - 1](this);
    }
  }
This will immediately call the last flow task and terminate the flow. We
call the last task to ensure that the control flow completes. This should
end pseudo-synchronously. Think `Promise.resolve()`, `callback()`, and
`return someValue` to provide the most accurate performance reading. This
doesn't matter practically besides that.

@param {boolean=} isReturn