1

我正在开发一个 CF9 应用程序,我们有一个有时需要调用的过程applicationStop()

我对这个功能的理解是它会关闭应用程序,并在下次请求时重新启动应用程序。

我正在使用它来重新加载一些应用程序范围的变量和第三方的东西,但是,看起来好像在函数完成处理onApplicationStart()之前调用了函数。onApplicationEnd()

谁能确认这是否是该功能的预期applicationStop()功能?它给我造成的问题是,onApplicationEnd()我正在重置一些我想重新初始化的应用程序范围的东西onApplicationStart(),但是如果它不等到onApplicationEnd()完成,那么我就会进入不一致的状态。


编辑 问题最初实际上更多是关于在 onApplicationEnd() 仍在执行时调用 onApplicationStart() 是否是预期行为,我打算通过在 onApplicationEnd() 中使用锁定来解决我的问题以确保它完成了重新加载。

但是,我添加了一个锁:

lock scope="application" type="exlusive" timeout="5" {

而且它似乎忽略了整个块 - 没有执行任何代码(包括日志记录),也没有引发异常(如果在执行之前锁定超时,则会引发异常?)。我认为这与我们在 onApplicationEnd() 中并没有完整的应用程序范围有关吗?

4

1 回答 1

3

我不知道这个问题的答案,所以我进行了适度彻底的研究并发表了我的发现

底线是你应该期待它,因为它确实发生了。我不认为这是一个错误,因为onApplicationStart()/onApplicationEnd()方法是事件处理程序,而不是事件本身,因此一个需要一段时间才能运行,而另一个也可能在过渡期间被调用是完全合法的。

但是我认为实际上它们应该是同步的,因为每个代码同时运行是不可取的。

我没有检查锁定的东西,但可能会看看我在博客文章中提到的那杯咖啡。

于 2013-04-08T21:40:03.293 回答