/// <summary>
        /// Устанавливает новый балансер, заставляет завершится старый.
        /// </summary>
        /// <remarks>
        /// Балансер сделан частью трид-пула (композиция) для того что бы время жизни балансера не превысила времени жизни
        /// самого пула.
        /// Т.к. это особенность данной реализации - я и не стал выносить его под интерфейс
        /// </remarks>
        /// <param name="balancer">Новый балансер</param>
        internal void SetPerformanceBalancer(PerformanceBalancer balancer, PerformanceBalanceSettings settings)
        {
            CancelPerformanceBalancer();

            if (balancer != null)
            {
                balancerThread = new PerformanceBalancerThread(balancer, settings);
            }
        }
Example #2
0
        /// <summary>
        /// Создаёт пул в соответствии с настройками
        /// </summary>
        /// <returns>Новый пул</returns>
        public ISimpleThreadPool Create()
        {
            var threadCollection = new ThreadCollection(Settings);
            var result           = new SimpleThreadPool(Settings, threadCollection);

            var strategies = PerformanceBalanceSettings.PerformanceBalancerStrategies ?? new List <IPerformanceBalancerStrategy>();

            if (strategies.Count > 0)
            {
                var balancer = new PerformanceBalancer(result, result, PerformanceBalanceSettings);
                result.SetPerformanceBalancer(balancer, PerformanceBalanceSettings);
            }

            return(result);
        }