使用 WebTaskScheduler 安排您的 Web 任务
该工具提供了简单的 Web 任务调度,专为 ASP.NET 设计,并使用缓存。
引言
桌面应用程序在任务调度方面与 Web 应用程序截然不同。Web 应用程序场景中的问题在于缺乏调度其任务的进程。ASP.NET 提供了一些技术,其中一种我用来为 Web 应用程序创建任务调度器。我在其中使用了一些缓存技术。
易于使用
请按照以下步骤操作
- 在项目中添加对 SalarSoft.WebTaskScheduler.dll 程序集的引用。
- 需要一个回调方法,所以按照以下示例编写
- 要运行任务,您需要添加它。以下示例添加了一个将在每个周末运行的任务
- 请在 Global.asax 文件的
ApplicationStart
事件中应用步骤 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
类型的参数。在任务执行时将调用此方法。
//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
类型的新实例,第三行,我们将任务添加到类中。
特点
- 如何使用
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
。它指定了任务执行间隔的类型。值可以是 None
、EveryNoon
、Daily
、Weekly
、TwoWeekly
或 Monthly
。例如,如果值设置为 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
,任务将在执行后被删除。默认值为 true
。TaskItem
指定任务项,其类型为 WebTaskItem
。可以在回调中修改此项。
一些建议
- 重要提示:在您的 ASP.NET 网站中,请始终在 Global.asax 的
Application_Start
事件中添加您的任务。 - 添加的任务不会存储在磁盘上,因此如果 Web 应用程序关闭或重新启动,它们将被删除。
WebTaskScheduler
在您的网站的任何地方都可以访问。只需将程序集引用添加到您的应用程序即可!
就是这样!