v1.2.1
- If a task errors, abort any active tasks (as when calling queue.abort).
- On abort, also dispose any references to tasks and results.
- If a task invokes its callback more than once, ignore subsequent invocations.
- If a task throws a synchronous error on start, treat this as invoking the callback.
- If a task throws a synchronous error on abort, ignore it.