/// <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); }
/// <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; }