                // We don't care which thread release the semaphore
                return await taskFunction().ConfigureAwait(false);
            }
            finally
            {
                semaphore.Release();
            }
        }


        public async Task Run(Func<Task> taskFunction)
        {
            await semaphore.WaitAsync();
