diff --git a/Modbus.Net/src/Base.Common/TaskManager.cs b/Modbus.Net/src/Base.Common/TaskManager.cs index 0e876b1..b1d5d6c 100644 --- a/Modbus.Net/src/Base.Common/TaskManager.cs +++ b/Modbus.Net/src/Base.Common/TaskManager.cs @@ -354,7 +354,7 @@ namespace Modbus.Net { if (Machine.IsConnected) { - var ans = await task.Invoke(Machine, _tasks, task.Params); + var ans = await task.Invoke(Machine, _tasks, task.Params, task.TimeoutTime); task.Return?.Invoke(ans); return true; } @@ -411,13 +411,15 @@ namespace Modbus.Net /// 返回值的键类型 /// 循环间隔(毫秒) /// 设备离线时的循环间隔(毫秒) - public TaskItemGetData(Action returnFunc, MachineGetDataType getDataType, int getCycle, int sleepCycle) + /// 任务的超时时间 + public TaskItemGetData(Action returnFunc, MachineGetDataType getDataType, int getCycle, int sleepCycle, int timeout = 100000) { Name = "GetDatas"; - Invoke = async (machine, tasks, parameters) => + TimeoutTime = timeout; + Invoke = async (machine, tasks, parameters, timeoutTime) => { var cts = new CancellationTokenSource(); - cts.CancelAfter(TimeSpan.FromSeconds(100000)); + cts.CancelAfter(TimeSpan.FromMilliseconds(timeoutTime)); var ans = await tasks.StartNew( async () => await machine.InvokeMachineMethod写入的值 /// 写入值的键类型 /// 返回值的处理函数 - public TaskItemSetData(Dictionary values, MachineSetDataType setDataType, Action returnFunc = null) + /// 任务的超时时间 + public TaskItemSetData(Dictionary values, MachineSetDataType setDataType, Action returnFunc = null, int timeout = 100000) { Name = "SetDatas"; - Invoke = Invoke = async (machine, tasks, parameters) => + TimeoutTime = timeout; + Invoke = Invoke = async (machine, tasks, parameters, timeoutTime) => { var cts = new CancellationTokenSource(); - cts.CancelAfter(TimeSpan.FromSeconds(100000)); + cts.CancelAfter(TimeSpan.FromMilliseconds(timeoutTime)); var ans = await tasks.StartNew( async () => await machine.InvokeMachineMethod public int TimerTime { get; set; } + /// + /// 超时时间 + /// + public int TimeoutTime { get; set; } = 100000; + /// /// 离线定时器 /// @@ -495,7 +504,7 @@ namespace Modbus.Net /// /// 执行的任务 /// - public Func> Invoke { get; set; } + public Func> Invoke { get; set; } /// /// 检测设备的在线状态 @@ -566,7 +575,7 @@ namespace Modbus.Net Timer = new Timer(async state => { if (!DetectConnected()) TimerChangeToDisconnect(); - var ans = await Invoke(GetMachine(), GetTaskFactory(), Params); + var ans = await Invoke(GetMachine(), GetTaskFactory(), Params, TimeoutTime); Return?.Invoke(ans); }, null, 0, TimerTime); }