• Модуль: controller
  • Путь к файлу: ~/bitrix/modules/controller/classes/general/controllertask.php
  • Класс: CControllerTask
  • Вызов: CControllerTask::ProcessAllTask
static function ProcessAllTask($limit = 10000)
{
	global $DB;
	//1. Finish partial
	//2. Execute new tasks
	//3. Retry failed tasks
	//4. Run low priority tasks
	foreach (array('P', 'N', 'R', 'L') as $status)
	{
		if ($limit > 0)
		{
			$dbrTask = $DB->Query($DB->TopSQL("
				SELECT ID, RETRY_COUNT
				FROM b_controller_task
				WHERE STATUS = '$status'
				".($status=='R'? 'and DATE_EXECUTE < date_sub(now(), interval RETRY_TIMEOUT second)': '')."
				ORDER BY ID ASC
			", $limit));
			while ($arTask = $dbrTask->Fetch())
			{
				$new_status = CControllerTask::ProcessTask($arTask["ID"]);
				while ($new_status === "P")
				{
					$new_status = CControllerTask::ProcessTask($arTask["ID"]);
				}

				if ($new_status === "F" && $arTask["RETRY_COUNT"] > 0)
				{
					CControllerTask::PostponeTask($arTask["ID"], $arTask["RETRY_COUNT"]-1);
				}

				$limit--;
				if ($limit <= 0)
				{
					break;
				}
			}
		}
	}

	return true;
}