constructor() {
    this.__running = false;
    /** @type {function[]} */
    this.__queue = [];
  }
Use the `.add` method to add async functions to the queue
Await the `.complete` if you want to ensure the queue is empty at any point
`complete` resolves whenever no more tasks are running.
Important note: Currently runs tasks 1 by 1, there is no concurrency option at the moment