/// <summary> /// 添加垃圾清理任务 /// </summary> /// <param name="value"></param> /// <param name="type"></param> private static void add(object value, Type type) { Monitor.Enter(taskLock); if (currentTasks.Array == null) { Monitor.Enter(freeTaskLock); if (freeTasks.Length == 0) { Monitor.Exit(freeTaskLock); try { Task[] array = new Task[arraySize]; array[0].Set(value, type); currentTasks.Set(array, 1); } finally { Monitor.Exit(taskLock); } } else { Task[] array = freeTasks.Array[--freeTasks.Length]; Monitor.Exit(freeTaskLock); array[0].Set(value, type); currentTasks.Set(array, 1); Monitor.Exit(taskLock); } } else { currentTasks.Array[currentTasks.Length++].Set(value, type); if (currentTasks.Length == arraySize) { Task[] array = currentTasks.GetNull(); try { tasks.Add(array); } finally { Monitor.Exit(taskLock); } } else { Monitor.Exit(taskLock); } } }