我有一个应用程序每晚发送几封100k的电子邮件,所以为了加快处理速度,增加了一些cfthreads。CFTHREAD中的范围问题
这造成了一些奇怪的错误,我发现在一个线程中创建的变量正在被另一个线程修改。从我读过的文档中,在一个线程中创建的变量应该仅对该线程可见?
做了一个简单的测试,像这样:
<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心不是定义,如我期望的那样。
任何人都知道这里发生了什么?
该代码只是为了演示似乎违背Coldfusion文档的行为。我的实际应用与您所说的相似,我实际上希望我的两个线程中的变量彼此完全隔离 – Omiron