public async Task AddTask(Func <Task> Action, bool IsGroup) { if (IsGroup) { tasks.Enqueue(GroupLimit.Enqueue(async() => await GlobalLimit.Enqueue(Action))); } else { tasks.Enqueue(GlobalLimit.Enqueue(Action)); } //queue.Append(new SendModel() { Action = func, IsGroup = IsGroup }); //Console.WriteLine(queue.Count()); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var scope = _logger.BeginScope("Service: {Service}", nameof(NexusModsCommentsMonitor)); stoppingToken.Register(() => _logger.LogInformation("Comments processing is stopping")); var policy = Policy .Handle <Exception>(ex => ex.GetType() != typeof(TaskCanceledException)) .WaitAndRetryForeverAsync( retryAttempt => TimeSpan.FromMinutes(10), (ex, time) => _logger.LogError(ex, "Exception during comments processing. Waiting {Time}...", time)); while (!stoppingToken.IsCancellationRequested) { await policy.ExecuteAsync(async ct => await _timeLimiter.Enqueue(async() => await ProcessComments(ct), ct), stoppingToken); } scope.Dispose(); }
/// <inheritdoc /> protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { return(await _rateLimiter.Enqueue(() => base.SendAsync(request, cancellationToken), cancellationToken)); }
public async Task Enqueue_CallFuncAndIAwaitableConstraintMethods() { await _TimeConstraint.Enqueue(_FuncTask); CheckSequence(); }