asp.net 計劃任務管理程序實現,多線程任務加載
2024-07-10 12:38:31
供稿:網友
asp.net下實現可以將計劃任務的方法放在global里,使用一個統一的任務管理類來管理各種任務的執行,做到并行不悖!
下面是我寫的一個方法,希望起個拋磚引玉的作用!大家一起學習下:
第一步定義一個接口,用來規范任務必須要實現的動作,該接口只有一個方法(簡單起見):
代碼如下:
/// <summary>
/// 工作單元接口,定義一個計劃任務必須完成的工作
/// </summary>
public interface IScheduledTask
{
/// <summary>
/// 任務執行
/// </summary>
void Execute();
}
第二步,定義一個類,用來管理計劃任務的執行和關閉:
代碼如下:
/// <summary>
/// 用來執行計劃任務的基本對象
/// </summary>
public class ScheduledTask
{
private static readonly ScheduledTask _ScheduledTask = null;
private Timer UpdateTimer = null;
/// <summary>
/// 間隔時間,單位為毫秒
/// </summary>
private int interval = 10 * 1000;
/// <summary>
/// 間隔時間,單位為毫秒
/// </summary>
public int Interval
{
get { return this.interval; }
set { this.interval = value; }
}
/// <summary>
/// 任務是否完成標志
/// </summary>
private int _IsRunning;
/// <summary>
/// 靜態構造函數,保證實例的唯一性
/// </summary>
static ScheduledTask()
{
_ScheduledTask = new ScheduledTask();
}
/// <summary>
/// 任務隊列
/// </summary>
private ArrayList tasks = new ArrayList();
/// <summary>
/// 任務隊列
/// </summary>
public ArrayList Tasks { get { return tasks; } }
/// <summary>
/// 返回任務實例
/// </summary>
/// <returns></returns>
public static ScheduledTask Instance()
{
return _ScheduledTask;
}
/// <summary>
/// 執行任務
/// </summary>
public void Start()
{
if (UpdateTimer == null)
{
UpdateTimer = new Timer(new TimerCallback(UpdateTimerCallback), null, interval, interval);
}
}
/// <summary>
/// 任務處理
/// </summary>
/// <param name="sender"></param>
private void UpdateTimerCallback(object sender)
{
if (Interlocked.Exchange(ref _IsRunning, 1) == 0)
{
try
{
//執行多個任務
foreach (IScheduledTask task in Tasks)
{
ThreadStart myThreadDelegate = new ThreadStart(task.Execute);
Thread myThread = new Thread(myThreadDelegate);
myThread.Start();
}
}
catch (Exception ex)
{
//錯誤處理
CreateLog(ex.Message, true);
}
finally
{
Interlocked.Exchange(ref _IsRunning, 0);
}
}
}
/// <summary>
/// 取消任務
/// </summary>
public void Stop()