2
ColdFusion에서 HTTP 요청 3 스레드를 실행하려고합니다. 이것은 3 가지 캠페인을 선택하고 각각의 수신자를 동시에 보내는 전자 메일 시스템입니다.ColdFusion에서 여러 스레드를 실행하는 방법
그러나 다음 코드는 하나의 스레드 만 실행 한 다음 떨어집니다.
<cfscript>
newsLetterCampaignGateway = createObject("component", "legacy.ssl.admin.news.model.newsLetterCampaignGateway");
newsLetterList = newsLetterCampaignGateway.getNewsLettersDueForSend();
//writedump(newsLetterList);abort;
</cfscript>
<cfloop query="newsLetterList" >
<cfset newsLetterId = newsLetterList.newsletterid>
<cfset campId = newsLetterList.id>
<cfset fromEmail = newsLetterList.fromEmail>
<!--- <cfdump var="#campId#"> --->
<cfthread action="run" name="runCampaign#campId#" >
<cflock
name="runCampaign_#campId#_Lock"
type="exclusive"
timeout="60">
<!--- <cfdump var="#campId#"> --->
<cfscript>
httpService = new http();
httpService.setMethod("get");
httpService.setCharset("utf-8");
httpService.setUrl("http://mysamplesite.com/legacy/ssl/admin/news/model/newsLettercampaign.cfc");
httpService.addParam(type="url",name="method",value="sendCampaignNewsLetters");
httpService.addParam(type="url",name="live",value="true");
httpService.addParam(type="url",name="campaignId",value="#campId#");
httpService.addParam(type="url",name="newsLetterId",value="#newsLetterId#");
httpService.addParam(type="url",name="fromEmail",value="#fromemail#");
httpService.send();
</cfscript>
</cflock>
</cfthread>
</cfloop>
<cfloop query="newsLetterList" >
<cfthread
action="join"
name="runCampaign#campId#"
/>
</cfloop>
아무 생각 없나요?
어떻게 하나의 스레드 만 실행한다고 판단합니까? –
잘못되었지만 'join'코드가 보입니다. 모든 작업이 끝날 때까지 기다리려면, 각각의 스레드에 대해'join '을 호출하는 대신 스레드 목록을 전달해야한다고 생각합니다. – Leigh
@Leigh, 틀리지 않아. 또한 cfthread action = run 태그 하나만 볼 수 있으며 루프 안에 있지 않습니다. –