我有一个应用程序,每晚发送几封 10 万封电子邮件,因此为了加快处理速度,添加了一些 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 没有定义,正如我所期望的那样。
有人知道这里发生了什么吗?