【问题标题】:How to use threading to perform background tasks in ASP.NET?如何使用线程在 ASP.NET 中执行后台任务?
【发布时间】:2011-06-17 17:51:12
【问题描述】:

在我的 ASP.NET 网站中,我有一个必须每 2-3 分钟自动执行一次的功能,即无需用户干预。该函数包含数据库访问。

我可以使用线程在后台执行此过程吗?

如果是,我该如何使用它?任何对教程的参考都会非常有帮助。

编辑

另外,我不是在寻找使用 Windows 服务的解决方案,因为我使用的是共享主机。所以我没有访问主机的所有权限。

【问题讨论】:

  • 让计划任务通过 curl 或类似方式访问 url 会更容易吗?
  • 有时共享主机环境提供了一个任务计划程序,可通过您的主机帐户的控制面板访问。

标签: .net asp.net multithreading .net-3.5


【解决方案1】:

我想使用task scheduler 会更容易、更高效。甚至可能是a service

【讨论】:

  • 这取决于托管环境。例如,在共享主机上,您可能没有此类工具。
  • @Ron Klein:在这种情况下,我建议这个人停止使用甚至不让他做他需要做的事情的廉价主机。您应该根据任务选择工具,不是吗?
  • @Matti Virkkunen:有时你不想“失去”一个客户,你必须要有创造力……这没那么简单。
  • @Ron:我来这里主要是为了编程,而不是做生意。
  • 我已经编辑了我的问题。检查我的问题的EDIT 部分
【解决方案2】:
【解决方案3】:

【讨论】:

  • (恕我直言)“仅仅因为你可以并不意味着你应该。” ...您可以轻松地在您的 ASPX 解决方案中连接一个线程开始。问题是它打破了惯例。我不想成为维护一个项目的系统管理员,让程序员做这样的事情。 :)
  • 我已经编辑了我的问题。检查我的问题的EDIT 部分
【解决方案4】:

理论上你可以这样做,但在很多方面都是错误的。首先,线程必须由访问页面的人启动,其次,您无法保证线程在某些条件导致它们停止之前将存在多长时间。主要规则:不要在 ASP.Net 中使用线程。

这样做的正确方法是@Matti 提到的任务调度程序或服务。此外,如果这些任务与 SQL 相关,您可能希望在 SQL 服务器上安排任务。

但是...有一个快速修复方法。当用户访问该页面时,首先检查自上次维护以来的时间,然后在需要时简单地预先执行维护。用户在第一次请求时可能会获得几毫秒/秒的额外延迟,但您不必使用单独的 Windows 服务或计划任务来搞乱您的解决方案。

【讨论】:

    【解决方案5】:

    创建一个可以放在客户端机器上的小可执行程序。把它放在任务调度程序上,每隔几分钟运行一次。当它运行时,让它在您的网络应用程序中访问您需要做的网页。

    您尝试在服务器上执行的操作的问题是,如果一段时间内没有人点击该应用程序,它将无法运行。由于您没有在服务器上进行调度,因此您会在服务器上遇到一些非常丑陋的 hack,或者在其他地方(例如客户端)使用调度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多