/// <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); }
internal SimpleThreadPool(SimpleThreadPoolSettings settings, ThreadCollection threadCollection) { if (threadCollection == null) { throw new ArgumentException("threadCollection"); } settings.Check(); this.settings = settings; if (this.settings.MaxWorkingQueueCapacity == null) { blockingCollection = new BlockingCollection <IThreadPoolWorkItem>(); } else { blockingCollection = new BlockingCollection <IThreadPoolWorkItem>(this.settings.MaxWorkingQueueCapacity.Value); } this.threadCollection = threadCollection; TryAddThreads(settings.StartWorkingThreadsCount); }