【发布时间】:2013-07-09 22:17:41
【问题描述】:
我正在尝试在 ColdFusion 中运行一个 http 请求的 3 个线程。这是一个电子邮件系统,它将选择 3 个不同的活动并同时发送给相应的收件人。
但是我下面的代码只运行一个线程然后就掉线了。
<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,你没有错。另外,我只看到一个 cfthread action=run 标签,而且它不在循环内。
-
@DanBracuk,线程正在这个循环中运行:
<cfloop query="newsLetterList" >
标签: coldfusion coldfusion-9 cfthread