// GUID проекта
Guid project_guid = Guid.Parse(project.TaskId);
// Количество ядер в машине
int cores = Environment.ProcessorCount;
// Полная инфа о текущем проекте в XML-формате (ВРОДЕ БЫ НЕ работает в ProjectMaker)
string task_info = ZennoPoster.GetTaskInfo(project_guid);
// создаем XML и задаем нужные параметры для запуска (НЕ ЗАБУДЬТЕ ДОБАВИТЬ В GAC + using)
var doc = new System.Xml.XmlDocument();
doc.LoadXml("<Task>" + task_info + "</Task>");
var esElement = doc.SelectSingleNode("Task/ExecutionSettings");
if (esElement == null) {
throw new Exception("Не нашли ноду Task/ExecutionSettings");
}
var threadsElement = doc.SelectSingleNode("Task/ExecutionSettings/LimitOfThreads");
if (threadsElement == null) {
throw new Exception("Не нашли ноду Task/ExecutionSettings/LimitOfThreads");
}
// изменяем количество потоков
threadsElement.InnerText = Convert.ToString(cores);
var triesElement = doc.SelectSingleNode("Task/ExecutionSettings/NumberOfTries");
if (triesElement == null) {
throw new Exception("Не нашли ноду Task/ExecutionSettings/NumberOfTries");
}
// количество повторений + 1 (т.к. текущий запуск для установки данных тоже считается)
triesElement.InnerText = Convert.ToString(cores + 1);
// Передаем новые данные в постер для запуска заданий
ZennoPoster.SetExecutionSettings(project_guid, esElement.InnerXml);
// результат - в лог
project.SendWarningToLog(
String.Format(
"Запустили {0} параллельных потоков (по числу ядер в системе)",
cores
),
true
);