private ServerInstance TryStart()
        {
            if (_isDisposed)
            {
                throw new ObjectDisposedException(nameof(LambdaSimulator));
            }

            if (_currentExecutionCount >= _maxConcurrency)
            {
                return(null);
            }
            _currentExecutionCount++;
            if (_concurrentQueue.TryDequeue(out var serverInstance))
            {
                // If instance is too old, recycle it.
                if (serverInstance.ActivationTime.Add(_maxInstanceLifetime) < DateTime.UtcNow)
                {
                    serverInstance.Dispose();
                    serverInstance = new ServerInstance(_createWebHostBuilder, _instanceColdStartDelay);
                }
            }
            else
            {
                serverInstance = new ServerInstance(_createWebHostBuilder, _instanceColdStartDelay);
            }

            return(serverInstance);
        }
 private void Finish(ServerInstance serverInstance)
 {
     if (!_isDisposed)
     {
         _concurrentQueue.Enqueue(serverInstance);
         _currentExecutionCount--;
     }
 }