在Quartz.net中安排一个动作

Jos*_*ech 1 .net c# quartz.net

我正在尝试了解Quartz.NET的来龙去脉,但在实现我认为非常简单的任务方面并没有取得太大进展。

我有一个接收动作和DateTime的方法,我只需要计划动作X在时间Y运行。

这看起来很简单,但是JobBuilder.Create()需要一个实现IJob的类型参数...但是直到我掌握了Action之前,我丝毫也没想过。我无法使用定义良好的Execute(IJobExecutionContext context)方法创建某些类,因为在编译时我没有该信息。

我也无法更改方法的签名。我得到一个动作和一个DateTime,这不是我的决定。

Quartz真的不能处理这个看似简单的任务吗?

Ami*_*iri 5

我不认为Quartz内置有这种特殊功能,但是在Quartz现有API之上实现它并不容易:

class RunActionJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        var action = context.MergedJobDataMap["action"] as Action;
        action();
    }
}

public static JobBuilder ActionJob(Action action)
{
    return JobBuilder
        .Create<RunActionJob>()
        .SetJobData(new JobDataMap
        {
            {"action", action}
        });
}

// Usage:

var job = ActionJob(() => Console.WriteLine("task 1..."))
    .WithIdentity("task1", "group1")
    .Build();
Run Code Online (Sandbox Code Playgroud)