IScheduledTaskHandler에서 작업 구현을 제공하려면 프로세스를 구현해야합니다 (구현을 다른 서비스 클래스에 넣으라고 조언합니다). 작업 관리자에 작업을 등록해야합니다. 첫 번째 작업을 등록한 후 처리 구현에서 Handler 생성자에 일단 작업이 실행되면 다음 작업이 예약되도록합니다. 여기
는 샘플입니다
public class MyTaskHandler : IScheduledTaskHandler
{
private const string TaskType = "MyTaskUniqueID";
private readonly IScheduledTaskManager _taskManager;
public ILogger Logger { get; set; }
public MyTaskHandler(IScheduledTaskManager taskManager)
{
_taskManager = taskManager;
Logger = NullLogger.Instance;
try
{
DateTime firstDate = //Set your first task date (utc).
ScheduleNextTask(firstDate);
}
catch(Exception e)
{
this.Logger.Error(e,e.Message);
}
}
public void Process(ScheduledTaskContext context)
{
if (context.Task.TaskType == TaskType)
{
try
{
//Do work (calling an IService for instance)
}
catch (Exception e)
{
this.Logger.Error(e, e.Message);
}
finally
{
DateTime nextTaskDate = //Your next date (utc).
this.ScheduleNextTask(nextTaskDate);
}
}
}
private void ScheduleNextTask(DateTime date)
{
if (date > DateTime.UtcNow)
{
var tasks = this._taskManager.GetTasks(TaskType);
if (tasks == null || tasks.Count() == 0)
this._taskManager.CreateTask(TaskType, date, null);
}
}
}
이 작동하지만, 여러 작업을 추가합니다. 프로세스를 시작하는 다른 방법이 있습니까? – Carl
@Carl 아래 답변을 참조하십시오! – Brendan
이것은 정확히 내가 필요로했던 것입니다. 감사. – bingles