Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / web / ASP.NET

Schedule your web tasks with the WebTaskScheduler

4.70/5 (10 votes)
23 Mar 2008CPOL4 min read 1   2.1K  
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#
    //C#
    
    static void MyTask_CallBack(WebTaskEventArgs e)
    {
        // Enter your codes here
    }

    VB:

    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#
    //C#
    
    WebTaskScheduler.Add("MyTask", MyTask_CallBack, TaskExecutePeriod.Weekly);

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

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

    C#
    //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:

    C#
    //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.

    C#
    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:

    C#
    //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#
    //C#:
    
    WebTaskScheduler.Lock();
    try
    {
        WebTaskScheduler.Add("MyTask", MyTask_CallBack, 1);
    }
    finally
    {
        WebTaskScheduler.Unlock();
    }

    The VB.NET code:

    VB
    '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
  • NameDecription
    NoneExecutes the task immediately (not recommended)
    EveryNoonExecutes the task every noon
    DailyExecutes the task every night
    WeeklyExecutes the task every weekend at night
    TwoWeeklyExecutes the task every two weeks at night
    MonthlyExecutes the task every month at night
    ShamsiWeeklyExecutes the task every week at night using Persian dates
    ShamsiTwoWeeklyExecutes the task every two weeks at night using Persian dates
    ShamsiMonthlyExecutes 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!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)