为什么 CFTHREAD 在循环中恢复局部变量值?

问题描述 投票:0回答:1

在循环中创建线程时,似乎每个线程都覆盖前一个线程。这是一些伪代码:

<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
的当前值吗?

我在这里缺少什么?

multithreading coldfusion cfthread
1个回答
0
投票

做了更多研究,发现 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”

© www.soinside.com 2019 - 2024. All rights reserved.