程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> asp.net定點執行任務總結

asp.net定點執行任務總結

編輯:關於ASP.NET

前兩天寫了一個定時發送天氣預報的程序,老是出現這樣或那樣的bug,甚至有時候出現拒絕服務的錯誤。去網上找了一下資料,發現是自己的定點發送存在一定的問題。現在總結一下經驗,並和大家一起探討一下。

首先我們要使用global.asax中的事件,在Application_Start事件中啟動我們的任務,在Application_End中停止我們的任務。 當然啟動我們的任務,必須是啟動一個線程去完成相應的工作。

開始,我在線程中做的事情是每隔900ms判斷一下,當前的事件是否等於指定的時間,如果等於的話,就執行相應的任務,但是這樣容易出現的毛病就是訪問太頻繁了,占用過多的cpu資源。

後來,我想到的方法是,計算現在到定點時間的ms數,由以下函數完成:

    private int GetSleepTime(int hour, int min, int second)

    {

        DateTime now = DateTime.Now;

        int sleep = (((hour - now.Hour) * 60 + (min - now.Minute)) * 60 + (second - now.Second)) * 1000;

        if (sleep < 0)

            sleep += 24 * 3600 * 1000;

        return sleep;

    }

這樣直接sleep到指定的事件點就可以了,然後再執行我們的任務。

為了能夠中途能夠認為停止,用sleep就不是很方便了,所以我決定用wait,具體的線程方法如下:

    private void Run()

    {


        while (isStart)

        {

            int sleep = GetSleepTime(19, 0, 0);

            lock (locker)

            {

                Monitor.Wait(locker, sleep);

            }

            if (isStart)

                SendWeatherReport(); // 這是我要定點完成的工作

        }

    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved