第一步定義一個接口,用來規(guī)范任務(wù)必須要實(shí) " /> 久久草这在线观看免费,91综合久久久久婷婷,在线不卡中文字幕

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

asp.net 計(jì)劃任務(wù)管理程序?qū)崿F(xiàn),多線程任務(wù)加載

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

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

復(fù)制代碼 代碼如下:
/// <summary>
/// 工作單元接口,定義一個計(jì)劃任務(wù)必須完成的工作
/// </summary>
public interface IScheduledTask
{
/// <summary>
/// 任務(wù)執(zhí)行
/// </summary>
void Execute();
}


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

復(fù)制代碼 代碼如下:
/// <summary>
/// 用來執(zhí)行計(jì)劃任務(wù)的基本對象
/// </summary>
public class ScheduledTask
{
private static readonly ScheduledTask _ScheduledTask = null;

private Timer UpdateTimer = null;

/// <summary>
/// 間隔時(shí)間,單位為毫秒
/// </summary>
private int interval = 10 * 1000;
/// <summary>
/// 間隔時(shí)間,單位為毫秒
/// </summary>
public int Interval
{
get { return this.interval; }
set { this.interval = value; }
}
/// <summary>
/// 任務(wù)是否完成標(biāo)志
/// </summary>
private int _IsRunning;

/// <summary>
/// 靜態(tài)構(gòu)造函數(shù),保證實(shí)例的唯一性
/// </summary>
static ScheduledTask()
{
_ScheduledTask = new ScheduledTask();
}
/// <summary>
/// 任務(wù)隊(duì)列
/// </summary>
private ArrayList tasks = new ArrayList();
/// <summary>
/// 任務(wù)隊(duì)列
/// </summary>
public ArrayList Tasks { get { return tasks; } }

/// <summary>
/// 返回任務(wù)實(shí)例
/// </summary>
/// <returns></returns>
public static ScheduledTask Instance()
{
return _ScheduledTask;
}

/// <summary>
/// 執(zhí)行任務(wù)
/// </summary>
public void Start()
{
if (UpdateTimer == null)
{
UpdateTimer = new Timer(new TimerCallback(UpdateTimerCallback), null, interval, interval);
}
}

/// <summary>
/// 任務(wù)處理
/// </summary>
/// <param name="sender"></param>
private void UpdateTimerCallback(object sender)
{
if (Interlocked.Exchange(ref _IsRunning, 1) == 0)
{
try
{
//執(zhí)行多個任務(wù)
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>
/// 取消任務(wù)
/// </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;//當(dāng)前的年份
int m = dt.Month;//當(dāng)前的月份

string root = HttpRuntime.AppDomainAppPath;

root += "ScheduledTaskLogs";

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

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

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

//以當(dāng)前月份為名創(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("--------------計(jì)劃任務(wù)" + err1 + "日志-----------------------------------------------------------------------");
sr.WriteLine(err1 + "時(shí)間: " + DateTime.Now.ToString());
sr.WriteLine("詳細(xì)內(nèi)容: " + message);
sr.WriteLine("--------------------------------------------------------------------------------------------");
}
sr.Close();
sr.Dispose();
}
else
{
StreamWriter sr = new StreamWriter(dirOk, false, Encoding.Default);
lock (sr)
{
sr.WriteLine();
sr.WriteLine("--------------計(jì)劃任務(wù)" + err1 + "日志-----------------------------------------------------------------------");
sr.WriteLine(err1 + "時(shí)間: " + DateTime.Now.ToString());
sr.WriteLine("詳細(xì)內(nèi)容: " + message);
sr.WriteLine("--------------------------------------------------------------------------------------------");
}
sr.Close();
sr.Dispose();
}
}
}

第三步,定義要做的動作處理類,繼承第一步定義的接口,下面的例子是一個定時(shí)郵件發(fā)送程序,在規(guī)定的時(shí)間段執(zhí)行郵件發(fā)送:
復(fù)制代碼 代碼如下:
/// <summary>
/// 計(jì)劃任務(wù)--定時(shí)發(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點(diǎn)發(fā)送郵件
if (hh < 10 || hh > 17)
{
ScheduledTask.CreateLog("沒到發(fā)送時(shí)間", true);
return;
}

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

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

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

復(fù)制代碼 代碼如下:
<script runat="server"><!--

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

void Application_End(object sender, EventArgs e)
{
// 在應(yīng)用程序關(guān)閉時(shí)運(yùn)行的代碼
WildRen.Common.ScheduledTask.Instance().Stop();

}

// --></script>

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

AspNet技術(shù)asp.net 計(jì)劃任務(wù)管理程序?qū)崿F(xiàn),多線程任務(wù)加載,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 囯产免费精品一品二区三区视频 | 深夜草逼逼 | 娇喘高潮教室h | WWW国产精品人妻一二三区 | 免费观看高清黄页网址大全 | 国产成人高清精品免费5388密 | 久久久国产精品免费A片蜜臀 | 亚洲精品无码一区二区三区四虎 | 91极品蜜桃臀在线播放 | 久久er国产精品免费观看2 | 2021国产在线视频 | 日韩内射美女人妻一区二区三区 | 久久中文字幕人妻AV熟女 | 国产精品久久vr专区 | 总裁呻吟双腿大开男男H | 99久久爱看免费观看 | 鬼灭之刃花街篇免费樱花动漫 | 男男h开荤粗肉h文1v1 | 无人区免费一二三四乱码 | 2021国产精品视频一区 | 久久久伊人影院 | 他揉捏她两乳不停呻吟口述 | 2017日日干 | 男助理憋尿PLAY灌尿BL出去 | 很黄很色60分钟在线观看 | 全免费A敌肛交毛片免费懂色AV | 日韩免费视频一区 | 免费成人小视频 | 国产午夜小视频 | 免费观看亚洲视频 | 亚洲春色AV无码专区456 | 欧洲电影巜肉欲丛林 | 色欲国产麻豆精品AV免费 | 十九禁啊啪射视频在线观看 | 亚洲这里只有精品 | 成人性生交大片免费看金瓶七仙女 | 99久久99 | 青青草在现线免费观看 | 国产毛片AV久久久久精品 | 挠黑色超薄丝袜脚心vk40分钟 | 免费在线伦理片 |