65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 WebTaskScheduler 安排您的 Web 任务

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.70/5 (8投票s)

2008年3月24日

CPOL

4分钟阅读

viewsIcon

56129

downloadIcon

2201

该工具提供了简单的 Web 任务调度,专为 ASP.NET 设计,并使用缓存。

引言

桌面应用程序在任务调度方面与 Web 应用程序截然不同。Web 应用程序场景中的问题在于缺乏调度其任务的进程。ASP.NET 提供了一些技术,其中一种我用来为 Web 应用程序创建任务调度器。我在其中使用了一些缓存技术。

易于使用

请按照以下步骤操作

  1. 在项目中添加对 SalarSoft.WebTaskScheduler.dll 程序集的引用。
  2. 需要一个回调方法,所以按照以下示例编写
  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

    此回调方法有一个 WebTaskEventArgs 类型的参数。在任务执行时将调用此方法。

  4. 要运行任务,您需要添加它。以下示例添加了一个将在每个周末运行的任务
  5. //C#
    
    WebTaskScheduler.Add("MyTask", MyTask_CallBack, TaskExecutePeriod.Weekly);

    在 VB.NET 中,代码会稍长一些。这是 VB.NET 示例

    '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

    第一行,我们定义一个 WebTaskExecuteCallback 类型的变量。第二行,我们创建一个 WebTaskExecuteCallback 类型的新实例,第三行,我们将任务添加到类中。

  6. 请在 Global.asax 文件的 ApplicationStart 事件中应用步骤 2 和 3。就是这样。

特点

  • 如何使用 Add 方法添加新任务
  • Add 方法用于添加新任务。以下是定义它的三种方式

    //Method 1:
    WebTaskScheduler.Add( String , WebTaskExecuteCallback , Integer  )
    
    //Method 2:
    WebTaskScheduler.Add( String , WebTaskExecuteCallback , TaskExecutePeriod )
    
    //Method 3:
    WebTaskScheduler.Add( String , WebTaskExecuteCallback , TimeSpan )

    这些重载的前两个参数具有相同的行为。

    第一个参数“key”是一个 string。它指定了任务的名称。此名称应唯一。此密钥可用于将来的操作。

    第二个参数“callback”是一个 WebTaskExecuteCallback。它指定了回调方法。如果任务执行,将运行此方法。带有 WebTaskExecuteCallback 类型的参数的方法有一个 WebTaskEventArgs 类型的参数,该参数已在页面底部进行了描述。

    方法 1 的第三个参数“DaysPeriod”是一个整数。它指定了任务执行之间的间隔。如果设置为 10,则任务将在 10 天后运行。

    方法 2 的第三个参数“period”是一个 TaskExecutePeriod。它指定了任务执行间隔的类型。值可以是 NoneEveryNoonDailyWeeklyTwoWeeklyMonthly。例如,如果值设置为 Weekly,则任务将在每个周末运行。

    方法 3 的第三个参数“customPeriod”是一个 TimeSpan。基于此,任务将在指定的 TimeSpan 后运行。例如,如果值设置为 45 分钟,则任务将在调用方法 45 分钟后运行。

  • 删除任务
  • 可以使用 Remove 方法删除任务。这是它的定义

    //Method 1:
    Remove(string key)
    
    //Method 2:
    Remove(WebTaskItem)

    第一个方法接受任务的密钥。第二个方法接受任务项,其类型为“WebTaskItem”。

  • 获取任务的详细信息
  • GetItem 方法返回现有任务项。

    GetItem( string )
    Returns WebTaskItem

    此方法有一个参数,即在 Add 方法中定义的任务密钥。此方法将返回一个 WebTaskItem

  • 同步访问
  • 有两种方法可以锁定和解锁对 WebTaskScheduler 实例的访问。这是一个高级选项,用于防止线程的多次访问方法。使用这些方法,只有一个线程可以访问该类,而其他线程将等待当前线程完成。

    这是它们的定义

    //Method 1:
    Lock()
    
    //Method 2:
    Lock( wait )
    
    //Method 3:
    Unlock()

    调用 Lock 方法锁定访问,调用 Unlock 方法解锁访问。第二个方法有一个参数,该参数指定 Wait 选项以检查是否有另一个线程正在使用该实例;如果值设置为 false,并且有另一个线程正在使用该类,则该方法将引发异常。

    重要提示:在使用这些方法时,请务必使用 try..finally 块。

    这是一个例子。

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

    VB.NET 代码

    '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
  • 名称 描述
    立即执行任务(不推荐)
    EveryNoon 每天中午执行任务
    每日 每天晚上执行任务
    每周 每周六晚上执行任务
    TwoWeekly 每两周晚上执行任务
    Monthly 每月晚上执行任务
    ShamsiWeekly 每周晚上使用波斯日期执行任务
    ShamsiTwoWeekly 每两周晚上使用波斯日期执行任务
    ShamsiMonthly 每月晚上使用波斯日期执行任务
  • WebTaskEventArgs
  • 此类有两个属性:“TaskItem”和“CanContinue”。CanContinue 指定任务是否可以下次再次运行。如果设置为 false,任务将在执行后被删除。默认值为 trueTaskItem 指定任务项,其类型为 WebTaskItem。可以在回调中修改此项。

一些建议

  1. 重要提示:在您的 ASP.NET 网站中,请始终在 Global.asaxApplication_Start 事件中添加您的任务。
  2. 添加的任务不会存储在磁盘上,因此如果 Web 应用程序关闭或重新启动,它们将被删除。
  3. WebTaskScheduler 在您的网站的任何地方都可以访问。只需将程序集引用添加到您的应用程序即可!

就是这样!

© . All rights reserved.