示例#1
0
        /// <summary>
        /// Get the singleton instance of <see cref="TaskPool"/>
        /// </summary>
        /// <param name="taskGenerator">A task generator which can generate new task to run.</param>
        /// <param name="maxThreadCount">The maxium count of threads which will run in the same time.</param>
        /// <returns></returns>
        public static TaskPool GetInstance(IPoolTaskGenerator <IPoolTask> taskGenerator, int maxThreadCount)
        {
            if (instance == null)
            {
                lock (locker)
                {
                    if (instance == null)
                    {
                        instance = new TaskPool(taskGenerator, maxThreadCount);
                    }
                }
            }

            return(instance);
        }
示例#2
0
        /// <summary>
        /// Constructor of TaskPool.
        /// </summary>
        /// <param name="taskGenerator"></param>
        /// <param name="maxThreadCount"></param>
        private TaskPool(IPoolTaskGenerator <IPoolTask> taskGenerator, int maxThreadCount)
        {
            toState             = TaskPoolState.RUN;
            currentState        = TaskPoolState.PAUSE;
            this.maxThreadCount = maxThreadCount;

            /// Start a thread to fetch <see cref="IPoolTask"/>.
            taskFetch = new TaskFetchThread(taskGenerator);
            Task thread = new Task(taskFetch.Run);

            thread.Start();

            mainThread = new Thread(Main);
            mainThread.Start();
        }
 public TaskFetchThread(IPoolTaskGenerator <IPoolTask> taskGenerator)
 {
     this.taskGenerator = taskGenerator;
 }