/// <summary> /// Начинает опрос нодов, которые можно опросить - вычислители и, например, матриксы /// </summary> /// <param name="what"></param> /// <param name="nodes"></param> /// <param name="args"></param> /// <param name="priority"></param> public void CreateTasks(string what, IEnumerable <PollNode> nodes, dynamic args, int priority) { List <PollTask> tasks = new List <PollTask>(); logger.Debug($"назначена задача {what} для {nodes.Count()} нодов"); foreach (var node in nodes.Where(n => !n.IsDisabled())) { //аргументы задачи = аргументы нода (networkAddress и т.п) + аргументы опроса (start, end, components) dynamic arguments = FillArgs(node.GetArguments(), args); //создание задачи для помещения в очередь string createText = $"создание задачи {what} для {node.GetId()} с приоритетом {priority}"; var task = new PollTask(what, node, arguments, node.GetPaths(), priority); if (!task.HasPaths()) { logger.Trace("{0}: отсутствует возможность связаться с вычислителем", createText); if (task.Priority != PollTask.PRIORITY_AUTO) { node.Log("задача отклонена, отсутствует возможность связаться с вычислителем"); } return; } logger.Trace("{0}: добавлено в очередь", createText); tasks.Add(task); } //добавление задач в очередь AddTasks(tasks); }
public void CreateTasksIterative(string what, IEnumerable <PollNode> nodes, dynamic args, int priority) { List <PollTask> tasks = new List <PollTask>(); var nds = nodes.Where(n => !n.IsDisabled()).ToArray(); logger.Debug(string.Format("назначена задача {0} для {1} нодов", what, nds.Count())); var cntr = 0; foreach (var node in nds) { //сбор аргументов задачи dynamic arguments = FillArgs(node.GetArguments(), args); var task = new PollTask(what, node, arguments, node.GetPaths(), priority); if (!task.HasPaths()) { if (task.Priority != PollTask.PRIORITY_AUTO) { node.Log("задача отклонена, отсутствует возможность связаться с вычислителем"); } logger.Debug("нет путей для {0}, задача отклонена", node.GetId()); continue; } tasks.Add(task); logger.Debug("таск пойман"); cntr++; if (cntr >= 100) { cntr = 0; AddTasks(tasks); logger.Debug("порция {0} задач ушла", tasks.Count); tasks.Clear(); } //var task = new PollTask(what, node, arguments, node.GetPaths(), priority); //if (!task.HasPaths()) //{ // if (task.Priority != PollTask.PRIORITY_AUTO) // node.Log("задача отклонена, отсутствует возможность связаться с вычислителем"); // return; //} //tasks.Add(task); //cntr++; //if(cntr>=100) //{ // cntr = 0; // AddTasks(tasks); // tasks.Clear(); //} } AddTasks(tasks); }