在asp.net之前的很长一段时间里,当我有一个很长的任务时,我只需要在页面上运行任务并使用某种类型的刷新将输出发送给用户。没有单独的线程或任何东西自asp.net以来,我一直在以同样的方式完成长任务。我有一个带有response.flush的aspx页面来刷新输出。这似乎对我来说工作正常(我有一些运行几个小时或更长时间的任务)但我一直在读这是不好的但我想知道为什么?你不会这样做会发生什么问题?
答案 0 :(得分:1)
假设用户意外或无意中导航离开执行漫长过程的页面。这可能会导致中断,对用户造成恐慌,然后通过重新提交可能会启动另一个长进程。
假设您必须在线访问您的银行帐户,并且您希望生成一些可能需要很长时间的财务报告。然后,您必须将页面打开,并且可能会离开您的桌面(例如)。有人可能会到你的办公桌前,在舒适的椅子上跳,然后在流程运行时按下后退按钮 - 他们刚刚发现你的帐户中有一百万美元。 “约翰尼,看起来你今天要为我们所有人买午餐!”
处理此类情况的标准方法,特别是在您的情况下,是让Windows服务负责处理,并且页面可以通过数据库,事件日志或某些内容定期询问进程的当前状态其他方式。这通常是我采取的方法,例如,当我的用户启动可能需要5分钟才能运行的开票流程时。用户可以重新访问该页面以检查其是否已准备就绪,或者该服务可以选择启动电子邮件,发送文本等以通知用户该操作的状态。