国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

asp.net 計劃任務管理程序實現(xiàn),多線程任務加載

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:43:52
文檔

asp.net 計劃任務管理程序實現(xiàn),多線程任務加載

asp.net 計劃任務管理程序實現(xiàn),多線程任務加載:asp.net下實現(xiàn)可以將計劃任務的方法放在global里,使用一個統(tǒng)一的任務管理類來管理各種任務的執(zhí)行,做到并行不悖! 下面是我寫的一個方法,希望起個拋磚引玉的作用!大家一起學習下: 第一步定義一個接口,用來規(guī)范任務必須要實現(xiàn)的動作,該接口只有一個方法
推薦度:
導讀asp.net 計劃任務管理程序實現(xiàn),多線程任務加載:asp.net下實現(xiàn)可以將計劃任務的方法放在global里,使用一個統(tǒng)一的任務管理類來管理各種任務的執(zhí)行,做到并行不悖! 下面是我寫的一個方法,希望起個拋磚引玉的作用!大家一起學習下: 第一步定義一個接口,用來規(guī)范任務必須要實現(xiàn)的動作,該接口只有一個方法

asp.net下實現(xiàn)可以將計劃任務的方法放在global里,使用一個統(tǒng)一的任務管理類來管理各種任務的執(zhí)行,做到并行不悖!
下面是我寫的一個方法,希望起個拋磚引玉的作用!大家一起學習下:

第一步定義一個接口,用來規(guī)范任務必須要實現(xiàn)的動作,該接口只有一個方法(簡單起見):

代碼如下:


/// <summary>
/// 工作單元接口,定義一個計劃任務必須完成的工作
/// </summary>
public interface IScheduledTask
{
/// <summary>
/// 任務執(zhí)行
/// </summary>
void Execute();
}

第二步,定義一個類,用來管理計劃任務的執(zhí)行和關閉:

代碼如下:


/// <summary>
/// 用來執(zhí)行計劃任務的基本對象
/// </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>
/// 靜態(tài)構造函數(shù),保證實例的唯一性
/// </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>
/// 執(zhí)行任務
/// </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
{
//執(zhí)行多個任務
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()
{
if (UpdateTimer != null)
{
UpdateTimer.Dispose();
UpdateTimer = null;
}
}

/// <summary>
/// 記錄日志至文本文件
/// </summary>
/// <param name="message"></param>
/// <param name="iserror"></param>
public static void CreateLog(string message, bool iserror)
{
DateTime dt = DateTime.Now;
int y = dt.Year;//當前的年份
int m = dt.Month;//當前的月份

string root = HttpRuntime.AppDomainAppPath;

root += "ScheduledTaskLogs";

if (!File.Exists(root)) Directory.CreateDirectory(root);

string dir_y = root + "\\" + y.ToString();
string dir_m = dir_y + "\\" + m.ToString();
string err = iserror ? "_taskerror" : "_task";
string dirOk = dir_m + "\\" + dt.Year + dt.Month + dt.Day + err + ".txt";

//以當前年份為名創(chuàng)建新目錄
if (!File.Exists(dir_y)) Directory.CreateDirectory(dir_y);

//以當前月份為名創(chuàng)建新目錄
if (!File.Exists(dir_m)) Directory.CreateDirectory(dir_m);

string err1 = iserror ? "錯誤" : "";

if (File.Exists(dirOk))
{
StreamWriter sr = new StreamWriter(dirOk, true, Encoding.Default);
lock (sr)
{
sr.WriteLine();
sr.WriteLine("--------------計劃任務" + err1 + "日志-----------------------------------------------------------------------");
sr.WriteLine(err1 + "時間: " + DateTime.Now.ToString());
sr.WriteLine("詳細內容: " + message);
sr.WriteLine("--------------------------------------------------------------------------------------------");
}
sr.Close();
sr.Dispose();
}
else
{
StreamWriter sr = new StreamWriter(dirOk, false, Encoding.Default);
lock (sr)
{
sr.WriteLine();
sr.WriteLine("--------------計劃任務" + err1 + "日志-----------------------------------------------------------------------");
sr.WriteLine(err1 + "時間: " + DateTime.Now.ToString());
sr.WriteLine("詳細內容: " + message);
sr.WriteLine("--------------------------------------------------------------------------------------------");
}
sr.Close();
sr.Dispose();
}
}
}

第三步,定義要做的動作處理類,繼承第一步定義的接口,下面的例子是一個定時郵件發(fā)送程序,在規(guī)定的時間段執(zhí)行郵件發(fā)送:
代碼如下:


/// <summary>
/// 計劃任務--定時發(fā)送郵件
/// </summary>
public class Task_MailSend : IScheduledTask
{
public void Execute()
{
string nw = DateTime.Now.ToString("HH");

int hh = 0;
if (!Int32.TryParse(nw, out hh)) { return; }

//每天11-13點發(fā)送郵件
if (hh < 10 || hh > 17)
{
ScheduledTask.CreateLog("沒到發(fā)送時間", true);
return;
}

DataTable dt = GetOrderedUser();
int num = dt.Rows.Count;
if (num == 0)
{
ScheduledTask.CreateLog("目前沒有用戶訂閱", true);
return;
}
/*

mail發(fā)送程序。。
*/
}

好了,執(zhí)行上面三步后,剩下的工作就交給global來做了!

代碼如下:


<script runat="server"><!--

void Application_Start(object sender, EventArgs e)
{
// 在應用程序啟動時運行的代碼
//WildRen.Common是我這里的命名空間
WildRen.Common.ScheduledTask.Instance().Interval = 12 * 60 * 60000;//設置計劃任務執(zhí)行時間間隔
WildRen.Common.ScheduledTask.Instance().Tasks.Add(new Task_MailSend());//向計劃任務管理程序添加要執(zhí)行的動作
WildRen.Common.ScheduledTask.Instance().Start();//啟動任務
}

void Application_End(object sender, EventArgs e)
{
// 在應用程序關閉時運行的代碼
WildRen.Common.ScheduledTask.Instance().Stop();

}

// --></script>

如果使用ajax連接此管理類模擬客戶端timer事件經(jīng)行處理也是可以的!當然方法不是唯一的,此程序可能存在一些不足之處,歡迎大家指正!

聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

asp.net 計劃任務管理程序實現(xiàn),多線程任務加載

asp.net 計劃任務管理程序實現(xiàn),多線程任務加載:asp.net下實現(xiàn)可以將計劃任務的方法放在global里,使用一個統(tǒng)一的任務管理類來管理各種任務的執(zhí)行,做到并行不悖! 下面是我寫的一個方法,希望起個拋磚引玉的作用!大家一起學習下: 第一步定義一個接口,用來規(guī)范任務必須要實現(xiàn)的動作,該接口只有一個方法
推薦度:
標簽: 軟件 加載 任務
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 韩日一区二区 | 日本国产在线观看 | 成人精品一区二区www | 黑人群性xxx| 国内不卡1区2区 | 国产成人久久综合二区 | 欧美日韩a | 欧美一区二区三 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲电影网址 | 国产成人精品一区二区三区… | 精品一区二区三区免费视频 | 欧美高清日韩 | 中文字幕有码在线播放 | 亚洲美女一区二区三区 | 国产精品九九久久精品女同 | 福利三区 | 精品一区二区三区亚洲 | 在线 v亚洲 v欧美v 专区 | 亚洲精品国产成人99久久 | 香港经典a毛片免费观看…伊人色综合久久 | 国产欧美日韩在线不卡第一页 | 国产精品 视频一区 二区三区 | 欧美在线 | 亚洲 | 国内精品线在线观看 | 亚洲欧美视频在线观看 | 久久精品国内一区二区三区 | 欧美日韩视频一区二区 | 欧美韩日 | 国产午夜视频 | 欧美日韩国产综合在线 | 日韩欧美在线综合网高清 | 97久久综合区小说区图片专区 | 日本五十路视频 | 欧美一区二区在线观看 | 国产成人一区二区 | 精品久久久久国产 | 亚洲欧美日韩精品久久久 | 日本a天堂| 国产精品久久毛片蜜月 | 亚洲国语在线视频手机在线 |