【发布时间】:2015-02-25 08:39:38
【问题描述】:
我有一个调用 cfcomponent 对象的循环。
<cfset queue_list = "1,2,3">
<cfloop list="#queue_list#" index="z">
<cfset args = StructNew()>
<cfset args.group_num = z>
<cfset args.client_id = 1>
<cfset processdownloads = downloader.ProcessDownload(argumentCollection=args)>
</cfloop>
该组件具有以下功能:
<cffunction name="ProcessDownload" access="public" output="false">
<cfargument name="group_num" type="numeric" required="yes">
<cfargument name="client_id" type="numeric" required="yes">
<cfset variables = arguments>
<cfthread action="RUN" name="download_#variables.client_id#_#variables.group_num#" priority="high">
<cffile action="WRITE" file="#expandpath('download\download_in_process\')##variables.group_num#.json" output="#variables.group_num#">
</cfthread>
</cffunction>
当我运行它时,我收到以下错误:
cfthread 标记的属性验证错误。无法创建名为 DOWNLOAD_4003_3 的线程。线程名称在一个页面中必须是唯一的。
错误发生在第29行。
我不知道为什么,但它似乎运行了两次。它不应该生成具有唯一线程名称的新线程,从而避免线程名称冲突吗?
【问题讨论】:
-
<cfset variables = arguments>如果不测试代码,看起来 可能 会覆盖系统范围VARIABLES- 这肯定会导致意外行为。 ..(尽管为什么要重新分配?有什么理由不能只使用arguments范围来引用变量名?) -
另外,如果您没有将 client_id 作为参数传入,您可能会遇到并发用户问题。
-
CFTHREAD 无法访问参数范围,它出现了。还有丹,我传入了 client_id,我只是没有将它包含在代码中。 (例如简化)
标签: multithreading coldfusion cfthread