Как правильно организовать работу потоков в Coldfusion на моем примере - PullRequest
0 голосов
/ 03 августа 2020

У меня есть приложение Coldfusion и страница, на которой я создаю и загружаю файл. Бывают случаи, когда этот процесс занимает много времени. Я хотел бы реализовать это так, чтобы весь процесс выглядел так:

  • начать процесс создания и загрузки файла
  • , если файл создается в течение определенного времени (например, 10 se c.), Затем немедленно предоставить его пользователю
  • если нет, то по истечении допустимого времени для генерации отобразить сообщение о том, что файл будет отправлен на электронную почту пользователя.

Я думаю, что потоки CF могут мне помочь, но я не использовал его раньше.

thread action="run" name="generateFile" {
    var createFileResult = myService.createFile();
}

thread action="join" name="generateFile" timeout="10000"; // 10 sec.

if (generateFile.status != "COMPLETED") {
    thread action="terminate" name="generateFile";
    var createFileResult = new CreateFileResult(message="We will produce the file and send you a link to download.");
}

В настоящее время я показываю сообщение, если файл не сгенерирован, но в при этом я теряю возможность сгенерировать файл по первому запросу. Меня интересует следующее: как, не убивая поток, в котором создается файл (если это возможно), завершить генерацию файла в фоновом режиме для пользователя и сразу отправить его на электронную почту пользователя?

Я хочу реализовать это таким образом, потому что хочу рационально использовать ресурсы сервера и не игнорировать результат проделанной работы, если файл не был сгенерирован по первому запросу пользователя, и не загружать сервер снова, когда тот же файл создается для отправки на электронную почту.

...