65.9K
CodeProject is changing. Read more.
Home

Schedule your web tasks with the WebTaskScheduler

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.70/5 (8 votes)

Mar 24, 2008

CPOL

4 min read

viewsIcon

55702

downloadIcon

2144

This tool provides easy web task scheduling, designed for ASP.NET and uses Caching.

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:

  1. Add a reference to the SalarSoft.WebTaskScheduler.dll assembly in your project.
  2. A callback method will be needed, so write it like the following example:
  3. //C#
    
    static void MyTask_CallBack(WebTaskEventArgs e)
    {
        // Enter your codes here
    }

    VB:

    'VB.NET
    
    Shared Sub MyTask_Callback(ByVal e As WebTaskEventArgs)
     ' Enter your codes here
    End Sub

    This callback method has an argument of the WebTaskEventArgs type. This method will be called when the task is executed.

  4. To run a task, you need to add it. The following example adds a task that will run every weekend:
  5. //C#
    
    WebTaskScheduler.Add("MyTask", MyTask_CallBack, TaskExecutePeriod.Weekly);

    In VB.NET, the code is a bit longer. Here is the VB.NET example:

    'VB.NET
    
    Sub AddMyTask()
    
     'Line 1
     Dim onMytaskCallBack As WebTaskExecuteCallback
    
     'Line 2
     onMytaskCallBack = New WebTaskExecuteCallback(AddressOf MyTask_CallBack)
    
     'Line 3
     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.

  6. Please apply steps 2 and 3 in the Global.asax file in the ApplicationStart event. That's it.

Features

  • How to add a new task with the Add method
  • The Add method is used to add a new task. Here are three ways in which it is defined:

    //Method 1:
    WebTaskScheduler.Add( String , WebTaskExecuteCallback , Integer  )
    
    //Method 2:
    WebTaskScheduler.Add( String , WebTaskExecuteCallback , TaskExecutePeriod )
    
    //Method 3:
    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 task
  • The Remove method can be used to remove a task. Here is its definition:

    //Method 1:
    Remove(string key)
    
    //Method 2:
    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 task
  • The 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 access
  • There 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:

    //Method 1:
    Lock()
    
    //Method 2:
    Lock( wait )
    
    //Method 3:
    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:

    //C#:
    
    WebTaskScheduler.Lock();
    try
    {
        WebTaskScheduler.Add("MyTask", MyTask_CallBack, 1);
    }
    finally
    {
        WebTaskScheduler.Unlock();
    }

    The VB.NET code:

    'VB.NET:
    
    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

  1. Important: In your ASP.NET site, always add your tasks in the Application_Start event of Global.asax.
  2. The added tasks are not stored on the disk, so they will be removed if the web application shuts down or restarts.
  3. The WebTaskScheduler is accessible from everywhere in your site. Just add the assembly reference to your application!

That's all!