Чтобы добавить ответ Ben Doom, я привожу пример кода, как это можно сделать. Есть несколько подходов и способов имен, организации и вызова кода ниже, но, надеюсь, это полезно.
В какой-то момент во время запуска запроса сохраните информацию о процессе в общей области и верните идентификатор клиенту. Вот примеры функций, которые можно использовать для запросов страниц или удаленных запросов.
<cffunction name="createProcess" output="false">
<cfset var id = createUUID()>
<cfset application.processInfo[id] = {
progress = 0,
kill = false
}>
<cfreturn id />
</cffunction>
Клиент может затем проверить ход выполнения с помощью сервера опроса или отправить запрос на уничтожение процесса
<cffunction name="getProcessProgress" output="false">
<cfargument name="processID" required="true">
<cfreturn application.processInfo[arguments.processID].progress />
</cffunction>
<cffunction name="killProcess" output="false">
<cfargument name="processID" required="true">
<cfset application.processInfo[arguments.processID].kill = true />
</cffunction>
Реальный рассматриваемый процесс на стороне сервера может затем нажать на функцию, например, во время цикла, чтобы проверить, следует ли прервать обработку и очистить любую работу соответствующим образом.
<cffunction name="shouldKillProcess" output="false">
<cfargument name="processID" required="true">
<cfreturn application.processInfo[arguments.processID].kill />
</cffunction>