在循环中创建线程时,似乎每个线程都覆盖前一个线程。这是一些伪代码:
<cfscript>
LOCAL.Items=[
"ABC",
"DEF",
"GHI",
"JKL",
"MNO",
"PQR",
"STU",
"VWX",
"YZ"];
for (LOCAL.item in LOCAL.Items) {
writeoutput(LOCAL.item & "<br />");
}
for (LOCAL.item in LOCAL.Items) {
thread name="items-#LOCAL.item#" action="run" {
writelog(text=LOCAL.item, type="information", file="thread-test");
}
}
</cfscript>
第一个循环的输出:
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ
(如预期)
thread-test.log 中的数据:
"Information","cfthread-23","03/11/24","13:18:40","MNO"
"Information","cfthread-28","03/11/24","13:18:40","YZ"
"Information","cfthread-23","03/11/24","13:18:40","YZ"
"Information","cfthread-28","03/11/24","13:18:40","YZ"
"Information","cfthread-23","03/11/24","13:18:40","YZ"
"Information","cfthread-28","03/11/24","13:18:40","YZ"
"Information","cfthread-23","03/11/24","13:18:40","YZ"
"Information","cfthread-28","03/11/24","13:18:40","YZ"
"Information","cfthread-23","03/11/24","13:18:40","YZ"
不应该唯一地命名每个线程创建一个唯一的线程并使用
LOCAL.item
的当前值吗?
我在这里缺少什么?
做了更多研究,发现 cfthread/thread 可以接受自定义属性,这些属性可以通过 ATTRIBUTES 范围访问。这似乎有效:
for (LOCAL.item in LOCAL.Items) {
thread name="items-#LOCAL.item#" action="run" item=LOCAL.item {
writelog(text=ATTRIBUTES.item & "<br />", type="information", file="thread-test");
}
}
thread-test.log的内容:
“信息”,“cfthread-29”,“03/11/24”,“13:48:35”,“ABC” “信息”,“cfthread-31”,“03/11/24”,“13:48:35”,“GHI” “信息”,“cfthread-32”,“03/11/24”,“13:48:35”,“JKL” “信息”,“cfthread-30”,“03/11/24”,“13:48:35”,“DEF” “信息”,“cfthread-33”,“03/11/24”,“13:48:35”,“MNO” “信息”,“cfthread-33”,“03/11/24”,“13:48:35”,“STU” “信息”,“cfthread-32”,“03/11/24”,“13:48:35”,“YZ” “信息”,“cfthread-34”,“03/11/24”,“13:48:35”,“PQR” “信息”、“cfthread-30”、“03/11/24”、“13:48:35”、“VWX”