Monday, May 2, 2016

Concurrent throttler


    using System;
    using System.Threading.Tasks;
    using Interfaces;

    public class ConcurrentThrottler : IThrottler
    {
        private TaskQueue queue;
        private int _concurrentRequests;

        public int ConcurrentOperations
        {
            get
            {
                return _concurrentRequests;
            }
        }

        public ConcurrentThrottler(int concurrentRequests)
        {
            Validator.IsPositive(concurrentRequests, CallerDetailsExtensions.GetMemberName(() => concurrentRequests));

            this._concurrentRequests = concurrentRequests;
            queue = new TaskQueue(concurrentRequests);
        }

        public Task<T> Enqueue<T>(Func<Task<T>> taskGenerator)
        {
            return queue.Enqueue(() => taskGenerator());
        }

        public Task Enqueue(Func<Task> taskGenerator)
        {
            return queue.Enqueue(() => taskGenerator());
        }
    }

No comments:

Post a Comment