diff --git a/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs b/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs index 9a93a6c..45e789c 100644 --- a/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs +++ b/Modbus.Net/Modbus.Net/Job/MachineJobScheduler.cs @@ -37,7 +37,7 @@ namespace Modbus.Net /// public static async Task> CreateScheduler(string triggerKey, int count = 0, int intervalSecond = 1) { - return await CreateScheduler(triggerKey, count, (double)intervalSecond); + return await CreateSchedulerMillisecond(triggerKey, count, intervalSecond * 1000); } /// @@ -48,16 +48,11 @@ namespace Modbus.Net /// 间隔毫秒数 /// public static async Task> CreateSchedulerMillisecond(string triggerKey, int count = 0, int intervalMilliSecond = 1000) - { - return await CreateScheduler(triggerKey, count, intervalMilliSecond / 1000.0); - } - - private static async Task> CreateScheduler(string triggerKey, int count = 0, double interval = 1) { IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler(); ITrigger trigger; - if (interval <= 0) + if (intervalMilliSecond <= 0) { trigger = TriggerBuilder.Create() .WithIdentity(triggerKey, "Modbus.Net.DataQuery.Group." + triggerKey) @@ -68,17 +63,17 @@ namespace Modbus.Net trigger = TriggerBuilder.Create() .WithIdentity(triggerKey, "Modbus.Net.DataQuery.Group." + triggerKey) .StartNow() - .WithSimpleSchedule(b => b.WithInterval(TimeSpan.FromSeconds(interval)).WithRepeatCount(count)) + .WithSimpleSchedule(b => b.WithInterval(TimeSpan.FromMilliseconds(intervalMilliSecond)).WithRepeatCount(count)) .Build(); else trigger = TriggerBuilder.Create() .WithIdentity(triggerKey, "Modbus.Net.DataQuery.Group." + triggerKey) .StartNow() - .WithSimpleSchedule(b => b.WithInterval(TimeSpan.FromSeconds(interval)).RepeatForever()) + .WithSimpleSchedule(b => b.WithInterval(TimeSpan.FromMilliseconds(intervalMilliSecond)).RepeatForever()) .Build(); IJobListener listener; - if (interval <= 0) + if (intervalMilliSecond <= 0) { listener = new JobChainingJobLIstenerWithDataMapRepeated("Modbus.Net.DataQuery.Chain." + triggerKey, new string[2] { "Value", "SetValue" }, count); } @@ -95,7 +90,7 @@ namespace Modbus.Net var jobKeys = await scheduler.GetJobKeys(GroupMatcher.GroupEquals("Modbus.Net.DataQuery.Group." + triggerKey)); await scheduler.DeleteJobs(jobKeys); - return new MachineGetJobScheduler(scheduler, trigger); + return new MachineGetJobScheduler(scheduler, trigger); } /// diff --git a/Modbus.Net/Modbus.Net/Job/MultipleMachinesJobSchedulerCreator.cs b/Modbus.Net/Modbus.Net/Job/MultipleMachinesJobSchedulerCreator.cs index b1547ae..7075ce5 100644 --- a/Modbus.Net/Modbus.Net/Job/MultipleMachinesJobSchedulerCreator.cs +++ b/Modbus.Net/Modbus.Net/Job/MultipleMachinesJobSchedulerCreator.cs @@ -28,7 +28,10 @@ namespace Modbus.Net { Task.Factory.StartNew(async () => { - Thread.Sleep((int)(intervalSecond * 1000.0 / _machineCount * index)); + if (intervalSecond > 0) + { + Thread.Sleep((int)(intervalSecond * 1000.0 / _machineCount * index)); + } var getJobScheduler = await MachineJobSchedulerCreator.CreateScheduler("Trigger" + index, count, intervalSecond); await machineJobTemplate(machine, getJobScheduler); }); diff --git a/Samples/MachineJob/Worker.cs b/Samples/MachineJob/Worker.cs index ca32ecb..a5b9a8d 100644 --- a/Samples/MachineJob/Worker.cs +++ b/Samples/MachineJob/Worker.cs @@ -13,7 +13,7 @@ namespace MachineJob.Service _logger = logger; } - protected override async Task ExecuteAsync(CancellationToken stoppingToken) + protected override Task ExecuteAsync(CancellationToken stoppingToken) { //1. Ö±½ÓCoding //List _addresses = new List @@ -67,12 +67,10 @@ namespace MachineJob.Service //}, -1, 10)); //5. ²»ÉèÖù̶¨Ê±¼ä£¬Á¬Ðø´¥·¢Job - foreach (var machine in machines) + return Task.Run(() => MultipleMachinesJobScheduler.RunScheduler(machines, async (machine, scheduler) => { - var scheduler = await MachineJobSchedulerCreator.CreateScheduler(machine.Id, -1, 0); - var job = scheduler.From(machine.Id + ".From", machine, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.Deal(machine.Id + ".Deal", OnSuccess, OnFailure).Result; - await job.Run(); - } + await scheduler.From(machine.Id + ".From", machine, MachineDataType.Name).Result.Query(machine.Id + ".ConsoleQuery", QueryConsole).Result.To(machine.Id + ".To", machine).Result.Deal(machine.Id + ".Deal", OnSuccess, OnFailure).Result.Run(); + }, -1, 0)); } public override Task StopAsync(CancellationToken cancellationToken) @@ -107,7 +105,7 @@ namespace MachineJob.Service { using (var context = new DatabaseWriteContext()) { - context.DatabaseWrites.Add(new DatabaseWriteEntity + context.DatabaseWrites?.Add(new DatabaseWriteEntity { Value1 = values["Test1"].DeviceValue, Value2 = values["Test2"].DeviceValue,