return new Task(() =>
{
foreach (var item in ps)
{
var device = _deviceStateManager.OnlineDevices.FirstOrDefault(r => r.Id == item.DeviceId);
var connectionid = device.ConnectionId;
_schedulingManager.AddMessage(item);
if (device.Type == DeviceType.Robot)
{
var robotMsg = item as RobotScheduingMessage;
_robotCommandPool.Wait(robotMsg);
}
else
{
new Task(() =>
{
if (device.Type == DeviceType.Spx960)
{
_spx960HubContext.Clients.Client(connectionid).Excute(item);
}
else if (device.Type == DeviceType.SpxXL)
{
_spxxlHubContext.Clients.Client(connectionid).Excute(item);
}
else
{
_spxdxHubContext.Clients.Client(connectionid).Excute(item);
}
while (true)
{
var state = _schedulingManager.VerifyMessage(item.Id, out string errorMsg);
if (state == ResponseState.Finished )
{
break;
}
if (state == ResponseState.Error)
{
throw new DispatchException(string.Format(Utility.ParallelTaskErrorTip, item.DeviceId, item.Id, errorMsg));
}
Thread.Sleep(1000);
}
}, TaskCreationOptions.AttachedToParent).Start();
}
}
});