public TimeSpan GetTimeToWaitFromQueryRateLimit(IEndpointRateLimit queryRateLimit, ITwitterExecutionContext executionContext) { if (queryRateLimit == null || queryRateLimit.Remaining > 0) { return(TimeSpan.Zero); } var timeToWaitInMs = (int)Math.Ceiling(queryRateLimit.ResetDateTimeInMilliseconds) + executionContext.RateLimitWaitFudge.TotalMilliseconds; return(TimeSpan.FromMilliseconds(timeToWaitInMs)); }
public async Task WaitForCredentialsRateLimitAsync(IEndpointRateLimit queryRateLimit, IReadOnlyTwitterCredentials credentials, ITwitterExecutionContext executionContext) { var timeToWait = GetTimeToWaitFromQueryRateLimit(queryRateLimit, executionContext); if (timeToWait > TimeSpan.Zero) { executionContext.Events.RaiseWaitingForRateLimit(new WaitingForRateLimitEventArgs(null, queryRateLimit, credentials)); await _taskDelayer.Delay(timeToWait).ConfigureAwait(false); } }
public async Task <TimeSpan> TimeToWaitBeforeTwitterRequestAsync(string query, IReadOnlyTwitterCredentials credentials, ITwitterExecutionContext twitterExecutionContext) { var queryRateLimits = await _rateLimitCacheManager.GetQueryRateLimitAsync(new GetEndpointRateLimitsParameters(query), credentials).ConfigureAwait(false); return(GetTimeToWaitFromQueryRateLimit(queryRateLimits, twitterExecutionContext)); }
public TwitterExecutionContext(ITwitterExecutionContext context) : base(context) { RequestFactory = context.RequestFactory; Container = context.Container; Events = context.Events; }