This commit is contained in:
parallelbgls
2017-05-18 22:04:59 +08:00
parent 9305cade9e
commit b558a57248

View File

@@ -468,7 +468,7 @@ namespace Modbus.Net
/// 任务 /// 任务
/// </summary> /// </summary>
/// <typeparam name="TInterType">任务返回值的类型</typeparam> /// <typeparam name="TInterType">任务返回值的类型</typeparam>
public class TaskItem<TInterType> : ITaskItem, IEquatable<TaskItem<TInterType>>, ICloneable public class TaskItem<TInterType> : ITaskItem, IEquatable<TaskItem<TInterType>>
{ {
/// <summary> /// <summary>
/// 定时器 /// 定时器
@@ -625,9 +625,9 @@ namespace Modbus.Net
/// 拷贝实例 /// 拷贝实例
/// </summary> /// </summary>
/// <returns>拷贝的实例</returns> /// <returns>拷贝的实例</returns>
public object Clone() public TaskItem<TInterType> Clone()
{ {
return MemberwiseClone(); return MemberwiseClone() as TaskItem<TInterType>;
} }
} }
@@ -951,7 +951,7 @@ namespace Modbus.Net
foreach (var machine in _machines) foreach (var machine in _machines)
{ {
Thread.Sleep(10); Thread.Sleep(10);
ans &= machine.InvokeTimer(item.Clone() as TaskItem<TInterType>); ans &= machine.InvokeTimer(item.Clone());
} }
} }
return ans; return ans;
@@ -1064,7 +1064,7 @@ namespace Modbus.Net
lock (_machines) lock (_machines)
{ {
foreach (var machine in _machines) foreach (var machine in _machines)
tasks.Add(_tasks.StartNew(async () => await machine.InvokeOnce(item.Clone() as TaskItem<TInterType>)).Unwrap()); tasks.Add(_tasks.StartNew(async () => await machine.InvokeOnce(item.Clone())).Unwrap());
} }
var ans = await Task.WhenAll(tasks); var ans = await Task.WhenAll(tasks);
return ans.All(p => p); return ans.All(p => p);
@@ -1081,7 +1081,7 @@ namespace Modbus.Net
{ {
var machine = _machines.FirstOrDefault(p => p.Machine.Id.Equals(machineId)); var machine = _machines.FirstOrDefault(p => p.Machine.Id.Equals(machineId));
if (machine != null) if (machine != null)
return await machine.InvokeOnce(item.Clone() as TaskItem<TInterType>); return await machine.InvokeOnce(item.Clone());
return false; return false;
} }
@@ -1096,7 +1096,7 @@ namespace Modbus.Net
{ {
var machine = _machines.FirstOrDefault(p => p.Machine.Id.Equals(machineId)); var machine = _machines.FirstOrDefault(p => p.Machine.Id.Equals(machineId));
if (machine != null) if (machine != null)
return machine.InvokeTimer(item.Clone() as TaskItem<TInterType>); return machine.InvokeTimer(item.Clone());
return false; return false;
} }