最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2009年11月09日 16:46:59   作者:  
b/s模式下用程序實現(xiàn)計劃任務,一直是個不太好解決和管理的問題,當然可以采用ajax 計時器的方法模擬form端的timer事件。
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)行處理也是可以的!當然方法不是唯一的,此程序可能存在一些不足之處,歡迎大家指正!

相關文章

  • 詳解.Net Core 權限驗證與授權(AuthorizeFilter、ActionFilterAttribute)

    詳解.Net Core 權限驗證與授權(AuthorizeFilter、ActionFilterAttribute)

    這篇文章主要介紹了.Net Core 權限驗證與授權(AuthorizeFilter、ActionFilterAttribute),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • js獲取Treeview選中的節(jié)點(C#選中CheckBox項)

    js獲取Treeview選中的節(jié)點(C#選中CheckBox項)

    方法網(wǎng)上有很多,試了一下都有瑕疵,于是設置斷點調試,各個屬性查找有用的字段,終于找到,接下來與大家分享解決方法,需要了解的朋友可以參考下
    2012-12-12
  • WCF中使用nettcp協(xié)議進行通訊的方法

    WCF中使用nettcp協(xié)議進行通訊的方法

    這篇文章主要給大家介紹了關于WCF中使用nettcp協(xié)議進行通訊的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用WCF具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • asp.net中url地址傳送中文參數(shù)時的兩種解決方案

    asp.net中url地址傳送中文參數(shù)時的兩種解決方案

    前天遇到一個地址傳遞中文參數(shù)變?yōu)閬y碼的問題,同樣的兩個web Project,一個是vs2003,一個是vs2005,前者可以,后者就是不可以。
    2009-11-11
  • Asp.net MVC下使用Bundle合并、壓縮js與css文件詳解

    Asp.net MVC下使用Bundle合并、壓縮js與css文件詳解

    在web優(yōu)化中有一種手段,壓縮js,css文件,減少文件大小,合并js,css文件減少請求次數(shù)。asp.net mvc中為我們提供一種使用c#代碼壓縮合并js和css這類靜態(tài)文件的方法。這篇文章主要介紹了在Asp.net MVC下使用Bundle合并、壓縮js與css文件的方法,需要的朋友可以參考下。
    2017-03-03
  • ASP.NET MVC使用母版頁視圖

    ASP.NET MVC使用母版頁視圖

    這篇文章介紹了ASP.NET MVC使用母版頁視圖的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • .NET?中的線程安全數(shù)據(jù)結構詳解

    .NET?中的線程安全數(shù)據(jù)結構詳解

    .NET提供了多種線程安全的數(shù)據(jù)結構,適用于不同的場景,本篇將介紹它們的簡單使用以及在.NETCore和.NET Framework中的可用性,感興趣的朋友一起看看吧
    2024-12-12
  • .NET 緩存模塊設計實踐

    .NET 緩存模塊設計實踐

    這篇承接上篇對緩存的概念,框架上的理解,講講緩存模塊設計實踐過程,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 淺談Asp.net Mvc之Action如何傳多個參數(shù)的方法

    淺談Asp.net Mvc之Action如何傳多個參數(shù)的方法

    本篇文章主要介紹了Asp.net Mvc之Action如何傳多個參數(shù)的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • ASP.NET MVC分頁和排序功能實現(xiàn)

    ASP.NET MVC分頁和排序功能實現(xiàn)

    這篇文章主要介紹了MVC學習系列之分頁和排序功能實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評論

循化| 安阳市| 古蔺县| 崇仁县| 武安市| 靖安县| 雅安市| 墨江| 阿城市| 上蔡县| 丘北县| 铜陵市| 扶沟县| 永福县| 宣汉县| 鹤山市| 台山市| 瑞金市| 六安市| 福安市| 含山县| 漠河县| 高碑店市| 洮南市| 霍山县| 土默特左旗| 剑河县| 鹤庆县| 丹江口市| 襄城县| 海兴县| 古浪县| 广南县| 昌邑市| 军事| 溆浦县| 张北县| 阳春市| 集安市| 安龙县| 象山县|