【问题标题】:ASP.NET Long task with no separate threads没有单独线程的 ASP.NET 长任务
【发布时间】:2012-06-22 01:48:03
【问题描述】:

在 asp.net 时代之前的很长一段时间里,当我有一个很长的任务时,我只会让任务在页面上运行并使用某种刷新将输出发送给用户。没有单独的线程或任何东西。自 asp.net 以来,我一直以同样的方式完成长期任务。我有一个带有 response.flush 的 aspx 页面来刷新输出。这对我来说似乎工作得很好(而且我有一些任务要运行几个小时或更长时间),但我一直读到这很糟糕,但我想知道为什么?有哪些发生在您身上的问题是您不会这样做的?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    假设用户无意中或无意中离开了正在执行漫长过程的页面。这可能会导致中断,让用户感到恐慌,然后可能会通过重新提交来启动另一个漫长的过程。

    假设您必须在线访问您的银行帐户,并且想要生成一些可能需要很长时间的财务报告。然后,您将不得不让您的页面保持打开状态,并且可能会离开您的办公桌(例如)。有人可能会走到您的办公桌前,跳上您舒适的椅子,然后在流程运行时按下返回按钮——他们刚刚发现您的账户中有 100 万美元。 “约翰尼,看来你今天要给我们大家买午餐了!”

    处理这种情况的标准方法,特别是在您的情况下,是让 Windows 服务负责处理,并且页面可以通过数据库、事件日志或其他方式定期询问进程的当前状态其他手段。这通常是我采用的方法,例如,当我的用户启动可能需要 5 分钟运行的发票流程时。用户可以重新访问页面以检查其是否准备就绪,或者服务可以选择启动电子邮件、发送文本等以通知用户操作状态。

    【讨论】:

    • 有道理,但这些都是从调度程序运行的管理任务
    • 这是自动化的吗?如果是这样,那么网页没有额外的好处,但如果它为你完成了工作,那就太棒了——只要确保会话超时配置正确。如果您将所有逻辑都编码到页面而不是公共库中,并且您有理由保留该网页,那么请保留该网页,只要这一切都由您的组织正确控制。
    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    相关资源
    最近更新 更多