push(objects, meta) {
    return this.#_register(objects, meta, 'pushAsync');
  }
Add a new `task` to the queue. Return a promise that fulfils on completion and rejects if an error occurs.
A second argument `meta` can define any additional data to be processed along with it.
The default worker, for example is a method executor, with this, the second argument can serve as an array of arguments.
The `objects` argument can be an array of tasks or an array of tasks and their arguments.
`q.push(task)`, `q.push(task, args)`, `q.push([task1, task2])`, `q.push([[task1, args], [task2, args]])`
@typedef {() => any} ExecFn
@param {ExecFn|ExecFn[]|Array<[ExecFn, any]>} objects
@param {any} meta
@returns {Promise<any>}
@example
const q = new AsyncQueue("queue1", 3);

q.push([
  [(t, v) => Promise.delay(t, v), [2500, 1]],
  [(t, v) => Promise.delay(t, v), [1500, 2]],
  [(t, v) => Promise.delay(t, v), [2000, 3]],
]).map(item => item.then(val => console.log('item>', val)));

// [?] Result
// item> 2
// item> 3
// item> 1

const q2 = new AsyncQueue("multiplier", 4, t => Promise.delay(2000, [t, t ** 2]));
q2.push([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).map(item =>
  item.then(([val, srq]) => console.log(`${val}^2 = ${srq}`))
);

// [?] Result
// 1^2 = 1
// 2^2 = 4
// 3^2 = 9
// 4^2 = 16
// 5^2 = 25
// 6^2 = 36
// 7^2 = 49
// 8^2 = 64
// 9^2 = 81
// 10^2 = 100