Mostly, ASP.NET doesn't provide some straightforward way to schedule tasks. Also, only what HTTP protocol can do is to return some output as a response after receives web request. Fortunately, there are numerous solutions to solve this problem. In this tutorial, I will show three ways to simulate scheduled tasks using pure ASP.NET methods (using of timer, cache expiration and threads).
In this tutorial, We're gonna use C# for running the script
Scheduled Tasks using Timer
Very simple solution to perform scheduled tasks is by using timer. Again, we'll use Global.asax and Application_Start procedure. In Application_Start we'll create a Timer and use Elapsed event to execute task in regular time intervals. To make it so, write this code in Global.asax file:
<%@ Application Language="C#" %>
<script runat="server">
// Code that runs on application startup
void Application_Start(object sender, EventArgs e)
{
// Dynamically create new timer
System.Timers.Timer timScheduledTask = new System.Timers.Timer();
// Timer interval is set in miliseconds,
// In this case, we'll run a task every minute
timScheduledTask.Interval = 60 * 1000;
timScheduledTask.Enabled = true;
// Add handler for Elapsed event
timScheduledTask.Elapsed +=
new System.Timers.ElapsedEventHandler(timScheduledTask_Elapsed);
}
void timScheduledTask_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// Execute some task
FirstTask();
}
void FirstTask()
{
// Here is the code we need to execute periodically
}
</script>
Scheduled Tasks using Cache Expiration as a Trigger
ASP.NET Cache expiration is one more method you can use to create scheduled tasks. In this method, it is not important what you put in the cache. In this example, I added short string "1", but could be anything. Useful for scheduled tasks is the fact that cache expires after specified time interval and then executes selected function (scheduled task).
Here is example of Global.asax file that uses cache expiration to schedule tasks in ASP.NET application. First, Application_Start method calls ScheduleTask procedure that uses cache expiration to schedule when task will be executed. In this example, cache willl expire after one hour. Then, after cache expired, SetTimer() is called. SetTimer function calls DoTask() method which represents code of scheduled task, and also calls again ScheduleTask() function to plan next task execution.
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// Schedule task for the first time
ScheduleTask();
}
static void ScheduleTask()
{
HttpRuntime.Cache.Add(
// String that represents the name of the cache item,
// could be any string
"ScheduledTask",
// Something to store in the cache
"1",
// No cache dependencies
null,
// Will not use absolute cache expiration
Cache.NoAbsoluteExpiration,
// Cache will expire after one hour
// You can change this time interval according
// to your requriements
TimeSpan.FromHours(1),
// Cache will not be removed before expired
CacheItemPriority.NotRemovable,
// SetTimer function will be called when cache expire
new CacheItemRemovedCallback(SetTimer));
}
// This function si called when cache is expired
static void SetTimer(string key, Object value, CacheItemRemovedReason reason)
{
// Call the task function
DoTask();
// Schedule new execution time
ScheduleTask();
}
static void DoTask()
{
// Task code which is executed periodically
// In this example, code will be executed every hour
}
</script>
Scheduled Tasks using Threading
Solution that uses threads is very simple. We'll use Application_Start procedure in Global.asax to initially start task. Then, in separate thread we'll call task again in regular time intervals. Code in Global.asax could look like this:
%@ Application Language="C#" %>
<%-- We need this namespace to work with threads --%>
<%@ Import Namespace="System.Threading" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// On application start, create an start separate thread
ThreadStart tsTask = new ThreadStart(TaskLoop);
Thread MyTask = new Thread(tsTask);
MyTask.Start();
}
static void TaskLoop()
{
// In this example, task will repeat in infinite loop
// You can additional parameter if you want to have an option
// to stop the task from some page
while (true)
{
// Execute scheduled task
ScheduledTask();
// Wait for certain time interval
System.Threading.Thread.Sleep(TimeSpan.FromHours(12));
}
}
static void ScheduledTask()
{
// Task code which is executed periodically
}
</script>
Free ASP.NET Hosting
Try our Free ASP.NET Hosting today and your account will be setup soon! You can also take advantage of our Windows & ASP.NET Hosting support with Unlimited Domain, Unlimited Bandwidth, Unlimited Disk Space, etc.