ПРИМЕЧАНИЕ: Я полностью переписал этот вопрос, чтобы учесть новую информацию. Пожалуйста, перечитайте, если вы уже прошли через этот.Неопределенная ошибка при использовании CFThread в пользовательских тегах в ColdFusion 10
Я получаю сообщение об ошибке при использовании cfthread
внутри пользовательского тега в ColdFusion 10. В журнале приложений, я получаю следующие данные:
Variable _cffunccfthread_cfThreadTag2ecfm16902001291 is undefined.
Имя функции это возвращение как ошибка это _cffunccfthread_cf[Page Name Calling the CFThreadTag]
, а затем номер, который не изменяется от запроса к запросу. Я могу дублировать это каждый раз, когда с помощью следующего кода:
Application.cfc:
component
{
this.name = "CFThreadCustomTagTest";
}
ThePage.cfm:
<cfthread action="run" name="ThreadTestInPage">
<cflog log="Application" text="The thread in the page successfully ran" type="information" />
</cfthread>
<cf_ThreadTag />
ThreadTag.cfm:
<cfif thisTag.ExecutionMode EQ "start">
<cfthread action="run" name="ThreadTest">
<cflog log="Application" text="The thread within the tag successfully ran" type="information" />
</cfthread>
</cfif>
Просто отбросьте все три файла в каталоге ColdFusion 10 и загрузите ThePage.cfm. Я получаю следующие записи в журнале приложений:
"Severity","ThreadID","Date","Time","Application","Message"
"Information","ajp-bio-8012-exec-1","06/19/12","07:18:11",,"C:\ColdFusion10\cfusion\logs\application.log initialized"
"Information","cfthread-11","06/19/12","07:18:15","CFTHREADCUSTOMTAGTEST","The thread in the page successfully ran"
"Error","cfthread-9","06/19/12","07:18:15",,"THREADTEST: Variable _cffunccfthread_cfThreadTag2ecfm16902001291 is undefined. "
Я также заметил, что в сообщении об ошибке для резьбы внутри пользовательского тега, он не содержит имя приложения. Хотя запись в журнале для потока на странице. Обратите внимание, что строка ошибки просто содержит ,,
для столбца Application журнала, в то время как успешная нить имеет "CFTHREADCUSTOMTAGTEST"
.
Если я изменяю ThreadTag.cfm
ждать нити внутри тега, чтобы закончить обработку, то все работает отлично, и я получаю две записи в журнале, как я ожидал:
<cfif thisTag.ExecutionMode EQ "start">
<cfthread action="run" name="ThreadTest">
<cflog log="Application" text="The thread within the tag successfully ran" type="information" />
</cfthread>
<cfthread action="join" name="ThreadTest" timeout="10" />
<cfdump var="#cfthread#">
</cfif>
И проверить, что там нигде не настроены на фанки, вот мой local development environment's settings summary.
Так что кажется, что если я просто выброшу поток там и не дождусь его завершения, то поток, похоже, ищет что-то с родительской страницы, которая больше не находится в памяти. По крайней мере, это мое совершенно необоснованное предположение :).
Я также подал ошибку с Adobe. Bug number 3218452.
Пожалуйста, разместите код, который выполняется в методе «AddLog» Server.Utilities.Logger. –
Также опубликуйте полный источник функции UpdatePropertyStats() –
UpdatePropertystats не является функцией, это имя потока. Я добавил содержимое функции, вызываемой потоком. –