Ejemplo n.º 1
0
 /// <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);
         }
     }
 }