private static void ReleaseCapacity(int capacity, RetryCapacity retryCapacity) { if (retryCapacity.AvailableCapacity >= 0 && retryCapacity.AvailableCapacity < retryCapacity.MaxCapacity) { lock (retryCapacity) { retryCapacity.AvailableCapacity = Math.Min((retryCapacity.AvailableCapacity + capacity), retryCapacity.MaxCapacity); } } } }
/// <summary> /// Virtual method that gets called on a success Response. If its a retry success response, the entire /// retry acquired capacity is released(default is 5). If its just a success response a lesser value capacity /// is released(default is 1). /// </summary> /// <param name="executionContext">Request context containing the state of the request.</param> public override void NotifySuccess(IExecutionContext executionContext) { if (executionContext.RequestContext.ClientConfig.ThrottleRetries && RetryCapacity != null) { _capacityManagerInstance.ReleaseCapacity(executionContext.RequestContext.LastCapacityType, RetryCapacity); } }