c# has an async semaphore object, I've used it in ...
# coroutines
b
c# has an async semaphore object, I've used it in the past to restrict a certain block of code to a single coroutine at a time (say if a server has to receive a sequence of commands in order). multiple calls to the function would suspend and resume in order. You can achieve the same thing creating a single worker context and pushing that code to that context to accomplish the same thing I guess, but the semaphore was a simple solution