private static void UpdateRemoveableTasks()
 {
     for (int i = 0; i < Tasks.Count; i++)
     {
         QueedTask task = Tasks[i];
         if (task.IsReady)
         {
             Trace.TraceInformation("Task is ready");
             try
             {
                 if (ThreadPool.QueueUserWorkItem(task.callback, task.State))
                 {
                     lock (Tasks)
                     {
                         Trace.TraceInformation("Removing task");
                         Tasks.RemoveAt(i);
                         i--;
                     }
                 }
             }
             catch (ThreadAbortException ex)
             {
                 throw ex;
             }
             catch (Exception e)
             {
                 Console.WriteLine(e);
             }
         }
     }
 }
        public static void Spawn(uint npcid, byte map, float x, float y, float z)
        {
            Zone zone;
            if (Singleton.Zones.TryGetZone(map, out zone))
            {
                MapObject regionObject = null;
                System.Threading.WaitCallback callback = delegate(object state)
                {
                    Singleton.Templates.UnspawnInstance(regionObject);
                    GC.Collect(0, GCCollectionMode.Optimized);
                };

                if (Singleton.Templates.SpawnNpcInstance(npcid, new Point(x, y, z), new Rotator(0, 0), zone, false, out regionObject))
                {
                    QueedTask timer = new QueedTask(callback, regionObject, 300000);
                }
            }
        }