Esempio n. 1
0
 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));
 }
Esempio n. 4
0
        public async Task Enqueue_CallFuncAndIAwaitableConstraintMethods()
        {
            await _TimeConstraint.Enqueue(_FuncTask);

            CheckSequence();
        }