I have a thread that shoots events to run programs at certain times.
I do want the website to have full control over the process so that is why I built it into the site as a long term thread that loops.
The issue is I scheduled a task to happen at a particular time and it happens almost randomly (maybe when I load the page). It seems as if the web app sleeps all threads until its used or something.
Here is the code:
public void run()
{
    Task.Factory.StartNew(() =>
    {
        while (true)
        {
            var lastDate = InternalEventLogger.GetLastDateTime();
            if (DateTime.Now >= lastDate.AddDays(1))
            {
                System.Diagnostics.Debug.WriteLine(DateTime.Now);
                System.Diagnostics.Debug.WriteLine(lastDate.AddDays(1));
                InternalEventLogger.RefreshLog();
            }
            bool needUpdate = false;
            System.Diagnostics.Debug.WriteLine("this");
            List<Event> tempList = new List<Event>(this.evtList.getList());
            foreach (Event evt in this.evtList.getList())
            {
                if (!evt.status.Equals("success"))
                    continue;
                if (evt.nextRun <= DateTime.Now)
                {
                    var tempEvt = evt;
                    System.Diagnostics.Debug.WriteLine("time to run: "+evt.name);
                    tempList.Remove(evt);
                    tempEvt.nextRun = evt.nextRun.AddMinutes(evt.interval);
                    tempEvt.lastRan = DateTime.Now;
                    tempList.Add(tempEvt);
                    needUpdate = true;
                    if (tempEvt.runLocation != null) 
                    Task.Factory.StartNew(() =>
                    {
                        Process p = new Process();
                        p.StartInfo.FileName = tempEvt.runLocation;
                        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                        p.Start();
                        string output = p.StandardOutput.ReadToEnd();
                        string err = p.StandardError.ReadToEnd();
                        InternalEventLogger.WriteLog(output);
                        InternalEventLogger.WriteLog("// ------------- ERROR -------------- \n" + err);
                        p.WaitForExit();
                    });
                }
            }
            if (needUpdate)
            {
                this.evtList.setList(tempList);
                this.evtList.serialize(ConfigurationManager.AppSettings["xmlEventLocation"]);
            }
            Thread.Sleep(10000);
        }
    }, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}
Ran from:
private static void RegisterServices(IKernel kernel)
{
    evtManager = new EventManager(ConfigurationManager.AppSettings["xmlEventLocation"]);
    evtManager.run();
    // Initalize Event Logger
    new InternalEventLogger();
} 
Here is a pic that shows the problem in timing:

IIS Settings below
Only at visit does it start the tasks.

 
     
    