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