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--; } }