Protected
initiateEnqueue additional work.
If task is a function it runs when current activity completes. If it is a promise then the mutex will not clear until task resolves.
Optional
cancel: (() => void)As a PromiseLike, you can await the Mutex. This promise resolves when current activity completes but the mutex may engage in another activity immediately thereafter. So the mutex is not guaranteed to be available after an await.
A mutex is a task queue where at most one task is active at a time.