コード例 #1
0
 public void Return(LambdaInstance lambdaInstance)
 {
     lock (_availableInstances)
     {
         _usedInstances.Remove(lambdaInstance.InstanceId);
         _availableInstances.Enqueue(lambdaInstance);
     }
 }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
 public void Return(LambdaInstance lambdaInstance)
 {
     Interlocked.Decrement(ref _counter);
     _instancePools[lambdaInstance.LambdaFunction.Name].Return(lambdaInstance);
 }