【问题标题】:CFThread Arguments vs AttributesCFThread 参数与属性
【发布时间】:2016-08-15 18:45:37
【问题描述】:

多年来,我一直在多个 ColdFusion 环境中使用以下代码:

<cfthread 
    action                  = "run" 
    name                    = "#Local.cachedFilename#"
    src                     = "#Arguments.src#"
>

    <!--- Process  image --->
    <cfset Local.objImage = This.processImage(
        src                     = Arguments.src
    ) />

</cfthread>

我今天来在不同的环境中重用我的组件,这是我第一次遇到错误,Arguments.src 在线程中不存在。

谷歌搜索返回了一个答案,我应该在线程内使用 attributes 范围...所以 ProcessImage 调用使用 Attributes.src 而不是 Arguments.src。

这很好用。一切都很好。但我很困惑。
我为 Railo 编写了这段代码。它工作得很好。我把它移植到CF10上,效果很好。我在CF11上运行它。它工作得很好。 我第一次遇到错误是在一个特定的盒子上,它也在运行 CF10。

所以我的问题是 - 某处是否有更新,或者是否有一些特定的情况允许我在 CFThread 中使用 arguments 范围?本质上,如果我应该使用 attributes 范围,那么多年来我怎么能正常工作?!

【问题讨论】:

  • 可能发生的情况是,在线程产生后,调用它的函数完成,函数中定义的变量被释放,所以当线程开始执行时,ARGUMENTS.src 不再存在。这就是为什么需要使用ATTRIBUTES 范围的原因:保持线程自包含且没有线程问题

标签: multithreading coldfusion cfthread


【解决方案1】:

CFThread 是一个标签,而不是一个函数调用。因此它有attributes,而不是arguments。似乎 Railo/Lucee 出于某种原因错误地使 attributes 在 arguments 范围内可用。 Adobe 的行为是正确的 IMO,而您过去在 Railo 上只是靠运气侥幸逃脱。

【讨论】:

  • 谢谢布拉德!这是一个四年前的问题,根据您自己的建议,我现在使用 CFConcurrent 代替我的大多数线程调用,因为它太棒了……但仍然很高兴澄清这一点! ;)
猜你喜欢
  • 1970-01-01
  • 2019-01-25
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2015-07-18
  • 2011-08-31
相关资源
最近更新 更多