public void Return(LambdaInstance lambdaInstance) { lock (_availableInstances) { _usedInstances.Remove(lambdaInstance.InstanceId); _availableInstances.Enqueue(lambdaInstance); } }
public LambdaInstance?Get() { lock (_availableInstances) { if (_availableInstances.TryDequeue(out var result)) { _usedInstances.Add(result.InstanceId, result); return(result); } if (_lambdaFunctionInfo.ReservedConcurrency.HasValue && _counter >= _lambdaFunctionInfo.ReservedConcurrency.Value) { return(null); } var instance = new LambdaInstance(_lambdaFunctionInfo); _counter++; _usedInstances.Add(instance.InstanceId, result !); return(instance); } }
public void Return(LambdaInstance lambdaInstance) { Interlocked.Decrement(ref _counter); _instancePools[lambdaInstance.LambdaFunction.Name].Return(lambdaInstance); }