diff --git a/Modbus.Net/src/Base.Common/TaskManager.cs b/Modbus.Net/src/Base.Common/TaskManager.cs
index b1d5d6c..49a7b5d 100644
--- a/Modbus.Net/src/Base.Common/TaskManager.cs
+++ b/Modbus.Net/src/Base.Common/TaskManager.cs
@@ -352,13 +352,9 @@ namespace Modbus.Net
/// 任务是否执行成功
public async Task InvokeOnce(TaskItem task)
{
- if (Machine.IsConnected)
- {
- var ans = await task.Invoke(Machine, _tasks, task.Params, task.TimeoutTime);
- task.Return?.Invoke(ans);
- return true;
- }
- return false;
+ var ans = await task.Invoke(Machine, _tasks, task.Params?.Invoke(), task.TimeoutTime);
+ task.Return?.Invoke(ans);
+ return true;
}
}
@@ -409,10 +405,8 @@ namespace Modbus.Net
///
/// 返回值的处理函数
/// 返回值的键类型
- /// 循环间隔(毫秒)
- /// 设备离线时的循环间隔(毫秒)
/// 任务的超时时间
- public TaskItemGetData(Action returnFunc, MachineGetDataType getDataType, int getCycle, int sleepCycle, int timeout = 100000)
+ public TaskItemGetData(Action returnFunc, MachineGetDataType getDataType, int timeout = 100000)
{
Name = "GetDatas";
TimeoutTime = timeout;
@@ -433,6 +427,19 @@ namespace Modbus.Net
};
Params = null;
Return = returnFunc;
+ }
+
+ ///
+ /// 构造函数
+ ///
+ /// 返回值的处理函数
+ /// 返回值的键类型
+ /// 循环间隔(毫秒)
+ /// 设备离线时的循环间隔(毫秒)
+ /// 任务的超时时间
+ public TaskItemGetData(Action returnFunc, MachineGetDataType getDataType, int getCycle,
+ int sleepCycle, int timeout = 100000) : this(returnFunc, getDataType, timeout)
+ {
TimerDisconnectedTime = sleepCycle;
TimerTime = getCycle;
}
@@ -450,24 +457,41 @@ namespace Modbus.Net
/// 写入值的键类型
/// 返回值的处理函数
/// 任务的超时时间
- public TaskItemSetData(Dictionary values, MachineSetDataType setDataType, Action returnFunc = null, int timeout = 100000)
+ public TaskItemSetData(Func> values, MachineSetDataType setDataType, int timeout = 100000, Action returnFunc = null)
{
Name = "SetDatas";
TimeoutTime = timeout;
- Invoke = Invoke = async (machine, tasks, parameters, timeoutTime) =>
+ Invoke = async (machine, tasks, parameters, timeoutTime) =>
{
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromMilliseconds(timeoutTime));
var ans =
await tasks.StartNew(
async () => await machine.InvokeMachineMethod>("SetDatasAsync", parameters[0],
- setDataType).WithCancellation(cts.Token)).Unwrap();
+ Task>("SetDatasAsync", setDataType, parameters[0]
+ ).WithCancellation(cts.Token)).Unwrap();
return ans;
};
- Params = new object[] {values};
+ Params = () => new object[] {values()};
Return = returnFunc;
}
+
+ ///
+ /// 构造函数
+ ///
+ /// 写入的值
+ /// 写入值的键类型
+ /// 返回值的处理函数
+ /// 循环间隔(毫秒)
+ /// 设备离线时的循环间隔(毫秒)
+ /// 任务的超时时间
+ public TaskItemSetData(Func> values, MachineSetDataType setDataType, int getCycle,
+ int sleepCycle, int timeout = 100000, Action returnFunc = null)
+ : this(values, setDataType, timeout, returnFunc)
+ {
+ TimerDisconnectedTime = sleepCycle;
+ TimerTime = getCycle;
+ }
}
///
@@ -514,7 +538,7 @@ namespace Modbus.Net
///
/// 任务执行的参数
///
- public object[] Params { get; set; }
+ public Func