【发布时间】:2014-10-05 15:55:45
【问题描述】:
我正在使用 ASP.NET WebForms。 在 PostBack 我创建了一个任务(任务运行时间很长)。 在 html 页面中,我需要一个可以取消此任务的按钮。 1.我单击在服务器上运行任务的按钮 GetResults 2. 等待一段时间后,我点击按钮取消,我需要的任务将被取消
我该怎么做?
【问题讨论】:
我正在使用 ASP.NET WebForms。 在 PostBack 我创建了一个任务(任务运行时间很长)。 在 html 页面中,我需要一个可以取消此任务的按钮。 1.我单击在服务器上运行任务的按钮 GetResults 2. 等待一段时间后,我点击按钮取消,我需要的任务将被取消
我该怎么做?
【问题讨论】:
尽管您可以这样做,但在 ASP.NET 中创建长时间运行的任务通常不是一个好主意,尤其是在它们是后台任务的情况下。
Phil Haack 对此有一篇很棒的文章 - http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/
这是关于该主题的另一篇好文章 - http://blog.stephencleary.com/2012/12/returning-early-from-aspnet-requests.html
您可以为此考虑诸如消息总线之类的东西。您还可以考虑数据库中的一个简单的 TaskQueue 表,您的 Web 应用程序将在其中插入一条与您的任务相对应的记录,状态为“待定”。然后,您可以拥有一个后台服务(如 Windows 服务),该服务读取“待处理”任务并在处理过程中将它们标记为“进行中”,并在完成时将它们标记为“完成”。这样,当任务处于“待处理”状态时,您可以让用户从 UI 中取消任务,这将简单地从数据库中删除“待处理”记录。
另一种选择是使用这样的解决方案 - http://hangfire.io/
【讨论】: