ExpectContinueOnThrottlePolicy
using Azure.Core;
using System;
using System.Threading;
namespace Azure.Storage
{
internal class ExpectContinueOnThrottlePolicy
{
private long _lastThrottleTicks;
private long _throttleIntervalTicks = 600000000;
public TimeSpan ThrottleInterval {
get {
return TimeSpan.FromTicks(_throttleIntervalTicks);
}
set {
_throttleIntervalTicks = value.Ticks;
}
}
public long ContentLengthThreshold { get; set; }
public override void OnSendingRequest(HttpMessage message)
{
long num = default(long);
if ((int)message.get_Request().get_Content() != 0 && (!message.get_Request().get_Content().TryComputeLength(ref num) || num >= ContentLengthThreshold) && !CompatSwitches.DisableExpectContinueHeader) {
long num2 = Interlocked.Read(ref _lastThrottleTicks);
if (DateTimeOffset.UtcNow.Ticks - num2 < _throttleIntervalTicks) {
RequestHeaders headers = message.get_Request().get_Headers();
headers.SetValue("Expect", "100-continue");
}
}
}
public override void OnReceivedResponse(HttpMessage message)
{
this.OnReceivedResponse(message);
if (message.get_HasResponse() && (message.get_Response().get_Status() == 429 || message.get_Response().get_Status() == 500 || message.get_Response().get_Status() == 503))
Interlocked.Exchange(ref _lastThrottleTicks, DateTimeOffset.UtcNow.Ticks);
}
public ExpectContinueOnThrottlePolicy()
: this()
{
}
}
}