message: newAckBasedPromise: once() -> on()
  Following up to discussion in
diff: @@ -286,6 +286,7 @@ export abstract class SharedObject<TEvent extends ISharedObjectEvents = ISharedO
  * Promises that are waiting for an ack from the server before resolving should use this instead of new Promise.
  * It ensures that if something changes that will interrupt that ack (e.g. the ComponentRuntime disposes),
  * the Promise will reject.
  + * If runtime is disposed when this call is made, executor is not run and promise is rejected right away.
  */
  protected async newAckBasedPromise<T>(
  executor: (resolve: (value?: T | PromiseLike<T> | undefined) => void, reject: (reason?: any) => void) => void,
  @@ -300,7 +301,7 @@ export abstract class SharedObject<TEvent extends ISharedObjectEvents = ISharedO
  return;
  }
  - this.runtime.once("dispose", rejectBecauseDispose);
  + this.runtime.on("dispose", rejectBecauseDispose);
  executor(resolve, reject);
  }).finally(() => {
  // Note: rejectBecauseDispose will never be undefined here
  