我有一个调用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>当我运行它时,我会收到以下错误:
Cf线程标记的属性验证错误。无法创建名为DOWNLOAD_4003_3的线程。线程名称在页面中必须是唯一的。
错误发生在第29行。
我不知道为什么,但它好像跑了两次。它不应该生成一个具有唯一线程名的新线程,从而避免胎面名称冲突吗?
发布于 2015-02-24 23:25:12
这很可能是因为您的CFC代码不是线程安全的。
这是:
<cfset variables = arguments>将函数的参数复制到对象的共享范围中。如果downloader对象是跨请求共享的,那么每个请求都将使用另一个请求的值。
为什么要将参数复制到对象变量范围中?这似乎是件很奇怪的事。
https://stackoverflow.com/questions/28706694
复制相似问题