Introduction
Desktop applications are very different form web applications in task scheduling. The problem in the web applications secnario is a lack of a process to schedule their tasks. ASP.NET provides some technologies, one of which I used to create a task scheduler for web applications. I have used some Caching techniques in it.
Easy to Use
Please follow these steps:
- Add a reference to the SalarSoft.WebTaskScheduler.dll assembly in your project.
- A callback method will be needed, so write it like the following example:
static void MyTask_CallBack(WebTaskEventArgs e)
{
}
VB:
Shared Sub MyTask_Callback(ByVal e As WebTaskEventArgs)
End Sub
This callback method has an argument of the WebTaskEventArgs
type. This method will be called when the task is executed.
- To run a task, you need to add it. The following example adds a task that will run every weekend:
WebTaskScheduler.Add("MyTask", MyTask_CallBack, TaskExecutePeriod.Weekly);
In VB.NET, the code is a bit longer. Here is the VB.NET example:
Sub AddMyTask()
Dim onMytaskCallBack As WebTaskExecuteCallback
onMytaskCallBack = New WebTaskExecuteCallback(AddressOf MyTask_CallBack)
WebTaskScheduler.Add("MyTask", onMytaskCallBack, TaskExecutePeriod.Weekly)
End Sub
On the first line, we define a variable of type WebTaskExecuteCallback
. On the second line, we create a new instance of the WebTaskExecuteCallback
type, and on the third line, we add the task to the class.
- Please apply steps 2 and 3 in the Global.asax file in the
ApplicationStart
event. That's it.
Features
WebTaskScheduler.Add( String , WebTaskExecuteCallback , Integer )
WebTaskScheduler.Add( String , WebTaskExecuteCallback , TaskExecutePeriod )
WebTaskScheduler.Add( String , WebTaskExecuteCallback , TimeSpan )
The first two arguments of these overloads have the same behavior.
The first argument "key
" is a string
. It specifies the name of the task. This name should be unique. This key may be used for future operations.
The second argument "callback
" is a WebTaskExecuteCallback
. It specifies the callback method. This method will run if the task is executed. The method with the WebTaskExecuteCallback
type has a WebTaskEventArgs
type of argument which has been described at the bottom of the page.
The third argument of Method 1, "DaysPeriod
", is an integer. It specifies the intervals between the execution of the tasks. If it is set to 10, the task will run after 10 days.
The third argument of Method 2, "period
", is a TaskExecutePeriod
. It specifies the type of the task execution intervals. The value can be None
, EveryNoon
, Daily
, Weekly
, TwoWeekly
, or Monthly
. For example, if the value is set to Weekly
, the task will run every weekends.
The third argument of Method 3, "customPeriod
", is a TimeSpan
. Based on this, the task will run after the specified time. For example, if the value is set to 45 minutes, the task will run after 45 minutes of adding the method call.
Deleting a taskThe Remove
method can be used to remove a task. Here is its definition:
Remove(string key)
Remove(WebTaskItem)
The first method accepts the key of the task. The second method accepts the task item which is of type "WebTaskItem
".
Getting the details of a taskThe GetItem
method returns the existing task item.
GetItem( string )
Returns WebTaskItem
This method has an argument that is the key of the task which is defined in the Add
method. This method will return a WebTaskItem
.
Synchronous accessThere are two methods to lock and unlock the access to the WebTaskScheduler
instance. This is an advanced option to prevent threads from multiple access to methods. With these methods, only one thread can have access to the class and the other threads will wait for the current thread to finish.
Here are their definitions:
Lock()
Lock( wait )
Unlock()
Call the Lock
method to lock the access, and call the Unlock
method to unlock the access. The second method has an argument that specifies the Wait
option to check if there is another thread that uses the instance; if the value is set to false
and there is another thread working with the class, the method will throw an exception.
Important: Please use a try..finally
block when you're using these methods.
Here is an example:
WebTaskScheduler.Lock();
try
{
WebTaskScheduler.Add("MyTask", MyTask_CallBack, 1);
}
finally
{
WebTaskScheduler.Unlock();
}
The VB.NET code:
WebTaskScheduler.Lock()
Try
Dim onMytaskCallBack As WebTaskExecuteCallback
onMytaskCallBack = New WebTaskExecuteCallback(AddressOf MyTask_CallBack)
WebTaskScheduler.Add("MyTask", onMytaskCallBack, TaskExecutePeriod.Weekly)
Finally
WebTaskScheduler.Unlock()
End Try
TaskExecutePeriod
Name | Decription |
---|
None | Executes the task immediately (not recommended) |
EveryNoon | Executes the task every noon |
Daily | Executes the task every night |
Weekly | Executes the task every weekend at night |
TwoWeekly | Executes the task every two weeks at night |
Monthly | Executes the task every month at night |
ShamsiWeekly | Executes the task every week at night using Persian dates |
ShamsiTwoWeekly | Executes the task every two weeks at night using Persian dates |
ShamsiMonthly | Executes the task every month at night using Persian dates |
WebTaskEventArgs
This class has two properties: "TaskItem
" and "CanContinue
". CanContinue
specifies whether the task can run again the next time or not. If it is set to false
, the task will be removed after execution. The default value is true
. TaskItem
specifies the task item whose type is WebTaskItem
. This can be modified in the callback.
Some tips
- Important: In your ASP.NET site, always add your tasks in the
Application_Start
event of Global.asax. - The added tasks are not stored on the disk, so they will be removed if the web application shuts down or restarts.
- The
WebTaskScheduler
is accessible from everywhere in your site. Just add the assembly reference to your application!
That's all!