我有一個CF10計劃任務設置爲每2分鐘運行一次,但有時需要比完成更長的時間。我設置了一個應用程序變量來防止作業在較早的作業花費超過2分鐘的時間內運行。我不希望計劃的任務重疊。這似乎工作。這是我的計劃任務的例子:CF10 CFSCHEDULER重疊
<cfoutput>
Scheduled Task hit: #NOW()#<br />
</cfoutput>
<cfif NOT StructKeyExists(application,"BigJob")>
<!--- Init the BigJob --->
<cfset application.BigJob = { isProcessing = FALSE }>
</cfif>
<!--- Is a BigJob already running? --->
<cfif application.BigJob.isProcessing>
<!--- yes it is, abort. --->
<cfoutput>
A BigJob is already in process.
</cfoutput>
<cfabort>
<cfelse>
<!--- No it isn't, start processing. --->
<cfset application.BigJob.isProcessing = TRUE>
<cfoutput>
Processing has begun: #NOW()#<br />
</cfoutput>
</cfif>
<cfscript>
// sleep for 15 seconds. To simulate processing.
sleep(15000);
</cfscript>
<cfoutput>
Scheduled Task complete: #NOW()#
</cfoutput>
<cfset application.BigJob.isProcessing = FALSE>
如果我打這在我的瀏覽器中,我得到這樣的輸出:
計劃任務命中:{TS「2013年5月10日16:02: 10' }
處理已經開始:{TS '2013年5月10日16時02分10秒'}
計劃任務完成:{TS「2013年5月10日16時02分: 25'}
如果我再次打在同一個瀏覽器的另一個選項卡5秒鐘後,10秒內的第一份工作完成之前,我得到這個:
計劃任務命中:{TS「2013年5月10日16 :02:25' }
處理已經開始:{TS '2013年5月10日16時02分25秒'}
計劃任務完成:{TS「2013年5月10日16 :02:40'}
這表明CF在開始下一個請求之前等待一個請求完成(請注意開始和結束時間)。
如果我打的是CFM在不同的瀏覽器5秒命中的第一個後,我得到這個預期輸出:
計劃任務命中:{TS「2013年5月10日16時02分18秒'}
BigJob已在處理中。
我的問題是,它看起來好像CFSCHEDULER不等待先前的請求完成。如果請求來自同一個瀏覽器,CF會等待,但是如果它來自計劃任務,CF似乎不會等待。在CF9中,我認爲它確實如此。
有沒有更好的方法來防止計劃任務在CF10中重疊?什麼是阻止我的瀏覽器兩次打同一頁的東西的谷歌術語?我是否正確地認爲CF9確實等待之前的任務完成,而CF10沒有?
我不能停留在周圍,但關於重疊 - 你看到這個博客條目..? [確保計劃任務不會在ColdFusion中重疊](http://www.bennadel.com/blog/%E2%80%8B1844-Making-Sure-Scheduled-Tasks-Don-t-Overlap) – Leigh 2013-05-10 20:59:36
Thanks Leigh,是的,我做到了。該解決方案似乎比我的應用程序變量解決方案更優雅。但是,我希望隨着CF10調度程序的所有變化,Adobe都能夠真正解決這個問題。 – 2013-05-10 21:08:58