Class to ensure that async tasks execute any critical path in order. It works like clients at a shop getting a number, waiting for their turn, and when they are done they give up their turn so that the next number can be serviced. Its functions can be called from any thread.