【发布时间】:2012-11-13 06:58:31
【问题描述】:
我有一个应用程序,每晚发送几十万封电子邮件,因此为了加快处理速度,添加了一些 cfthreads。
这导致了一些奇怪的错误,我发现在一个线程中创建的变量正在被另一个线程修改。从我读过的文档来看,在一个线程中创建的变量应该只对该线程可见?
像这样做了一个简单的测试:
<cfthread
name="thread1"
action="run">
<cfsavecontent variable="local.template_body">
<cfinclude template="templates\6\2\bulletin_template.cfm">
</cfsavecontent>
<cfset tmpEmailBody = template_body>
</cfthread>
<cfthread
name="thread2"
action="run">
<cffile action="append"
file="C:\inetpub\error1.txt"
output="#tmpEmailBody#">
</cfthread>
“tmpEmailBody”的内容成功写入文件。
奇怪的是,如果我删除了 cfsavecontent 部分,并且有:
<cfset tmpEmailBody = "test">,然后第二个线程引发错误,tmpEmailBody 没有定义,正如我所料。
有人知道这里发生了什么吗?
【问题讨论】:
标签: multithreading coldfusion scope cfthread