Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Quartz.NET 2.0中获取所有作业_C#_Scheduled Tasks_Quartz.net - Fatal编程技术网

C# 在Quartz.NET 2.0中获取所有作业

C# 在Quartz.NET 2.0中获取所有作业,c#,scheduled-tasks,quartz.net,C#,Scheduled Tasks,Quartz.net,我已经在服务器上设置了AdoJobStore,所有作业都运行得很好。现在我正在编写一个远程客户端来管理我的所有作业 安排新作业非常简单,但在版本2.0中,我似乎无法检索现有作业的列表。我找到的所有资源都做了如下操作 var groups = sched.JobGroupNames; for (int i = 0; i < groups.Length; i++) { string[] names = sched.GetJobNames(groups[i]); for (int

我已经在服务器上设置了AdoJobStore,所有作业都运行得很好。现在我正在编写一个远程客户端来管理我的所有作业

安排新作业非常简单,但在版本2.0中,我似乎无法检索现有作业的列表。我找到的所有资源都做了如下操作

var groups = sched.JobGroupNames;
for (int i = 0; i < groups.Length; i++)
{
    string[] names = sched.GetJobNames(groups[i]);
    for (int j = 0; j < names.Length; j++)
    {
        var currentJob = sched.GetJobDetail(names[j], groups[i]);
    }
}
var groups=sched.jobgroupname;
对于(int i=0;i
我面临的问题是GetJobNames已被删除,并且查看源代码,已被移动到JobStoreSupport基类,JobStoreCMS继承自该基类。但是,该方法已标记为受保护,因此无法从外部访问


如何在2.0中检索作业列表?

您可以使用“获取正在执行的作业列表”:

var executingJobs = sched.GetCurrentlyExecutingJobs();
foreach (var job in executingJobs)
{
    // Console.WriteLine(job.JobDetail.Key);
}
或获取有关计划作业的所有信息(示例控制台应用程序):

private static void GetAllJobs(isScheduler调度程序)
{
IList jobGroups=scheduler.GetJobGroupNames();
//IList triggerGroups=scheduler.GetTriggerGroupNames();
foreach(作业组中的字符串组)
{
var groupMatcher=groupMatcher.GroupContains(组);
var jobKeys=scheduler.GetJobKeys(groupMatcher);
foreach(jobKey中的var jobKey)
{
var detail=scheduler.GetJobDetail(jobKey);
var triggers=scheduler.GetTriggersOfJob(jobKey);
foreach(触发器中的ITrigger触发器)
{
控制台写入线(组);
Console.WriteLine(jobKey.Name);
控制台写入线(详细说明);
Console.WriteLine(trigger.Key.Name);
Console.WriteLine(trigger.Key.Group);
WriteLine(trigger.GetType().Name);
WriteLine(scheduler.GetTriggerState(trigger.Key));
DateTimeOffset?nextFireTime=trigger.GetNextFireTimeUtc();
if(nextFireTime.HasValue)
{
Console.WriteLine(nextFireTime.Value.LocalDateTime.ToString());
}
DateTimeOffset?previousFireTime=trigger.GetPreviousFireTimeUtc();
if(previousFireTime.HasValue)
{
Console.WriteLine(previousFireTime.Value.LocalDateTime.ToString());
}
}
}
} 
}
我已使用找到的代码。

更新

如果有人感兴趣,可以从我的GitHub下载示例代码

有人问如何获得已完成作业的列表。
我认为没有一个简单的方法可以做到这一点。
想到的唯一选择是使用作业(或触发器)侦听器


我已经在github上上传了一个,我的主程序可以在这里接收已完成作业的事件

如果要获取重复间隔,请重复计数等将ITrigger强制转换为ISimpleTrigger

private void LogInfo(IScheduler scheduler) 
{
    log.Info(string.Format("\n\n{0}\n", Scheduler.GetMetaData().GetSummary()));

    var jobGroups = scheduler.GetJobGroupNames();
    var builder = new StringBuilder().AppendLine().AppendLine();

    foreach (var group in jobGroups)
    {
        var groupMatcher = GroupMatcher<JobKey>.GroupContains(group);
        var jobKeys = scheduler.GetJobKeys(groupMatcher);

        foreach (var jobKey in jobKeys)
        {
            var detail = scheduler.GetJobDetail(jobKey);
            var triggers = scheduler.GetTriggersOfJob(jobKey);

            foreach (ITrigger trigger in triggers)
            {
                builder.AppendLine(string.Format("Job: {0}", jobKey.Name));
                builder.AppendLine(string.Format("Description: {0}", detail.Description));
                var nextFireTime = trigger.GetNextFireTimeUtc();
                if (nextFireTime.HasValue)
                {
                    builder.AppendLine(string.Format("Next fires: {0}", nextFireTime.Value.LocalDateTime));
                }
                var previousFireTime = trigger.GetPreviousFireTimeUtc();
                if (previousFireTime.HasValue)
                {
                    builder.AppendLine(string.Format("Previously fired: {0}", previousFireTime.Value.LocalDateTime));
                }
                var simpleTrigger = trigger as ISimpleTrigger;
                if (simpleTrigger != null)
                {
                    builder.AppendLine(string.Format("Repeat Interval: {0}", simpleTrigger.RepeatInterval));
                }
                builder.AppendLine();
            }
        }
    }

    builder.AppendLine().AppendLine();
    log.Info(builder.ToString); 
}
private void LogInfo(isScheduler调度程序)
{
log.Info(string.Format(“\n\n{0}\n”,Scheduler.GetMetaData().GetSummary());
var jobGroups=scheduler.GetJobGroupNames();
var builder=new StringBuilder().AppendLine().AppendLine();
foreach(作业组中的var组)
{
var groupMatcher=groupMatcher.GroupContains(组);
var jobKeys=scheduler.GetJobKeys(groupMatcher);
foreach(jobKey中的var jobKey)
{
var detail=scheduler.GetJobDetail(jobKey);
var triggers=scheduler.GetTriggersOfJob(jobKey);
foreach(触发器中的ITrigger触发器)
{
AppendLine(string.Format(“作业:{0}”,jobKey.Name));
AppendLine(string.Format(“Description:{0}”,detail.Description));
var nextFireTime=trigger.GetNextFireTimeUtc();
if(nextFireTime.HasValue)
{
AppendLine(string.Format(“Next fires:{0}”,nextFireTime.Value.LocalDateTime));
}
var previousFireTime=trigger.GetPreviousFireTimeUtc();
if(previousFireTime.HasValue)
{
AppendLine(string.Format(“先前激发:{0}”,previousFireTime.Value.LocalDateTime));
}
var simpleTrigger=作为ISimpleTrigger的触发器;
if(simpleTrigger!=null)
{
AppendLine(string.Format(“Repeat Interval:{0}”,simpleTrigger.RepeatInterval));
}
AppendLine();
}
}
}
builder.AppendLine().AppendLine();
log.Info(builder.ToString);
}

自Quartz.NET 2.2.1版以来,您可以使用
GroupMatcher.AnyGroup()
,这里作为
IScheduler
的扩展方法实现:

public static List<IJobDetail> GetJobs(this IScheduler scheduler)
{
    List<IJobDetail> jobs = new List<IJobDetail>();

    foreach (JobKey jobKey in scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup()))
    {
        jobs.Add(scheduler.GetJobDetail(jobKey));
    }

    return jobs;
}
公共静态列表GetJobs(此IsScheduler调度程序)
{
列表作业=新列表();
foreach(调度程序中的JobKey JobKey.GetJobKey(GroupMatcher.AnyGroup()))
{
jobs.Add(scheduler.GetJobDetail(jobKey));
}
返回工作岗位;
}

这将为您获得每个计划作业的
IJobDetail
列表。

对于Quartz.NET版本3.0,您可以使用

这将显示quartz.net 3.x中所有正在运行的作业和触发器

using Quartz;
using Quartz.Impl;
using Quartz.Impl.Matchers;

    class Program
    {
            var allTriggerKeys = scheduler.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup());
            foreach (var triggerKey in allTriggerKeys.Result)
            {
             var triggerdetails =   scheduler.GetTrigger(triggerKey);
             var Jobdetails = scheduler.GetJobDetail(triggerdetails.Result.JobKey);

                Console.WriteLine("IsCompleted -" + triggerdetails.IsCompleted + " |  TriggerKey  - " + triggerdetails.Result.Key.Name + " Job key -" + triggerdetails.Result.JobKey.Name);

            }
}
使用石英;
使用Quartz.Impl;
使用Quartz.Impl.Matchers;
班级计划
{
var allTriggerKeys=scheduler.GetTriggerKeys(GroupMatcher.AnyGroup());
foreach(alltriggerkies.Result中的var triggerKey)
{
var triggerdetails=scheduler.GetTrigger(triggerKey);
var Jobdetails=scheduler.GetJobDetail(triggerdetails.Result.JobKey);
Console.WriteLine(“IsCompleted-”+triggerdetails.IsCompleted+”| Tri
using Quartz;
using Quartz.Impl;
using Quartz.Impl.Matchers;

    class Program
    {
            var allTriggerKeys = scheduler.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup());
            foreach (var triggerKey in allTriggerKeys.Result)
            {
             var triggerdetails =   scheduler.GetTrigger(triggerKey);
             var Jobdetails = scheduler.GetJobDetail(triggerdetails.Result.JobKey);

                Console.WriteLine("IsCompleted -" + triggerdetails.IsCompleted + " |  TriggerKey  - " + triggerdetails.Result.Key.Name + " Job key -" + triggerdetails.Result.JobKey.Name);

            }
}