Exemplo n.º 1
0
        /// <summary>
        /// This is the constructor for the task manager.
        /// </summary>
        /// <param name="dispatcher">The dispatcher function that is used to process the specific tasks.</param>
        /// <param name="policy">The task manager policy.</param>
        public TaskManager(Func <TransmissionPayload, Task> dispatcher, TaskManager.Policy policy)
            : base(policy, nameof(TaskManager))
        {
            if (policy == null)
            {
                throw new ArgumentNullException($"{nameof(TaskManager)}: policy can not be null");
            }

            mPauseCheck = new ManualResetEventSlim();

            mAvailability = new TaskAvailability(policy.PriorityLevels, policy.ConcurrentRequestsMax);

            mTasksQueue = new QueueTrackerContainer <QueueTracker>(policy.PriorityLevels);

            mProcessInternalQueue = new ConcurrentQueue <TaskTracker>();

            mProcesses = new ConcurrentDictionary <string, TaskManagerProcessContext>();

            Dispatcher = dispatcher ?? throw new ArgumentNullException($"{nameof(TaskManager)}: dispatcher can not be null");

            if (!mPolicy.ProcessKillOverrunGracePeriod.HasValue)
            {
                mPolicy.ProcessKillOverrunGracePeriod = TimeSpan.FromSeconds(15);
            }

            mTaskRequests = new ConcurrentDictionary <Guid, TaskTracker>();
        }