AsyncLock
Asynchronous lock.
public AsyncLock()
Clears the work items in the queue and drops further work being queued.
Queues the action for execution. If the caller acquires the lock and becomes the owner,
the queue is processed. If the lock is already owned, the action is queued and will get
processed by the owner.