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,