ASP.NET 에서 돌아가는 스케줄러 구현


루트에 Global.aspx 생성

public class Global : System.Web.HttpApplication

{

protected void Application_Start(object sender, EventArgs e)

{

StartScheduler();

}


...

...


//////////////////////////////////////////////////////////////////////////

// 스케줄러 소스 시작

private static DateTime whenTaskLastRan = DateTime.Now; // 마지막 스케줄러가 실행된 시간


private void StartScheduler()

{

ThreadStart tsTask = new ThreadStart(ScheduleTaskLoop);

Thread MyTask = new Thread(tsTask);

MyTask.Start();

}


static void ScheduleTaskLoop()

{

while (true)

{

DateTime oneDayAgo = DateTime.Now.AddDays(-1);


// 하루가 지났으면(새벽 4~ 6사이)

if ((whenTaskLastRan < oneDayAgo) && (4 <= oneDayAgo.Hour && oneDayAgo.Hour <= 6))

{

if(ScheduledTask())

whenTaskLastRan = DateTime.Now;

}

// 한시간 동안 Sleep

System.Threading.Thread.Sleep(TimeSpan.FromHours(1));

}

}


static bool ScheduledTask()

{

bool ret = false;

try

{

// DoSomething... 스케줄 걸 작업들.

ret = true;

}

catch (Exception e)

{

}

return ret;

}


// 스케줄러 소스 종료

//////////////////////////////////////////////////////////////////////////

}


}


+ Recent posts