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;
}
// 스케줄러 소스 종료
//////////////////////////////////////////////////////////////////////////
}
}