Programar tarea en ASP.NET

Estoy tratando de crear un programador de tareas que se ejecuta dos veces al día. He implementado un programador de tareas usando CacheItemRemovedCallaback, como se sugiere enesta publicación yeste blog. Tengo una función que le permite al administrador modificar los tiempos programados y los guarda en las variables de la aplicación:

protected void UpdateSchedule(object sender, EventArgs e)
{
    Button button = sender as Button;
    if (button.ID == "scheduleButton1")
    {

        Application.Lock();
        Application["buildSchedule1"] = GetScheduleTime1; 
        Application.UnLock(); 
    }
    else if (button.ID == "scheduleButton2")
    {
        Application.Lock();
        Application["buildSchedule2"] = GetScheduleTime2; 
        Application.UnLock(); 
    }
    HttpRuntime.Cache.Remove(Global.DummyCachekey); //remove current scheduled task and set new time
 }

Y en Global.aspx tengo:

protected void Application_Start(object sender, EventArgs e)
{
    Application.Lock();
    Application["buildSchedule1"] = new TimeSpan(10,00, 0); //default time
    Application["buildSchedule2"] = new TimeSpan(16,00, 0); //default time
    Application.UnLock(); 
    SheduleTask(); 
}; 

El problema es que, por alguna razón (probablemente debido al reciclaje del grupo de aplicaciones), los tiempos de programación se restablecen, e incluso algunas veces la tarea no se inicia en los tiempos predeterminados.

Encontré soluciones que mencionan los servicios de Windows o el programador de tareas de Windows, pero eso no me funciona, ya que necesito poder permitir que el administrador configure los tiempos a través de la aplicación web. (Busco esto, pero no pude encontrar nada).

Respuestas a la pregunta(2)

Su respuesta a la pregunta