任务池也是引用池的一种表现
在GF里任务池 主要运行在 WebRequest(网络请求), Download(下载), LoadResource(加载资源)时使用。
TaskBase 任务基类
- 实现了引用接口
- 内部维护两个字段 任务编号和优先级
TaskPool 任务池
internal sealed class TaskPool<T> where T : TaskBase
private readonly Stack<ITaskAgent<T>> m_FreeAgents;
private readonly GameFrameworkLinkedList<ITaskAgent<T>> m_WorkingAgents;
private readonly GameFrameworkLinkedList<T> m_WaitingTasks;
- 通过栈维护所有空闲代理, 这个代理就是任务的具体实现过程,在框架中很多地方都使用了这种接口方式,具有高度的扩展性。
- 通过一个链表维护所有的工作代理。
- 通过一个链表维护所有的等待任务。
- 添加任务时,首先根据当前任务的优先级插入到等待任务链表的对应位置中。
-
/// <summary> /// 任务池轮询。 /// </summary> /// <param name="elapseSeconds">逻辑流逝时间,以秒为单位。</param>