首页 / 知识

关于c#:在ASP.Net应用程序中处理长时间运行的最佳方法是什么?

2023-04-15 23:25:00

关于c#:在ASP.Net应用程序中处理长时间运行的最佳方法是什么?

What's the best way to handle long running process in an ASP.Net application?

在我的Web应用程序中,有一个过程可以从整个Web查询数据,对其进行过滤,然后将其保存到数据库中。可以想象,此过程需要一些时间。我当前的解决方案是增加页面超时,并在加载时向用户提供AJAX进度条。这是一个有两个原因的问题-1)它仍然需要很长时间并且用户必须等待2)它有时仍会超时。

我已经涉足线程化过程,并且已经阅读了我应该将其异步发布到Web服务("即发即弃")的信息。

我读过的一些参考文献:
-MSDN
-忘却

所以我的问题是-最好的方法是什么?

更新:用户输入数据后,我想将其重定向到结果页面,该页面随着进程在后台运行而逐渐更新。


为避免过多的体系结构天文学,我经常使用隐藏的iframe来调用长时间运行的流程并流回进度信息。结合jsProgressBarHandler之类的功能,您可以轻松地为较长的任务创建出色的带外进度指示,而一般的进度动画不会削减这些进度指示。

在特定情况下,您可能希望每个任务使用一个LongRunningProcess.aspx调用,以避免这些页面超时。

例如,调用LongRunningProcess.aspx?taskID = 1将其启动,然后在该任务结束时发出

1
document.location ="LongRunningProcess.aspx?taskID=2".

恶作剧。


我们遇到了类似的问题,并通过一个异步Web服务调用开始了工作(这意味着用户不必等待工作完成)就解决了该问题。然后,Web服务启动了一个SQL作业,该作业执行了该工作,并定期用该工作的状态更新了一个表。我们提供了一个允许用户查询表的UI。


我上一份工作遇到了这个确切的问题。我发现最好的方法是启动一个异步进程,并在完成时通知用户(通过电子邮件或其他方式)。由于超时和浪费生产力,让他们等待那么长时间会成问题。让他们等待进度条会给他们一种错误的安全感,即他们关闭浏览器时可以取消该过程,但实际情况可能并非如此,具体取决于您如何设置系统。


将作业及其相关参数添加到作业队列表中。然后,编写一个Windows服务,该服务将拾取并处理这些作业,将结果保存到适当的位置,然后通过电子邮件将结果链接发送给请求者。提供某种类型的UI也是一种不错的选择,以便用户可以检查其作业的状态。

这种方法比启动单独的线程或增加超时要好得多,尤其是在您的应用程序较大且需要扩展的情况下,因为您可以根据需要简单地添加多个服务器来处理作业。


我对此的解决方案是一种带外服务,该服务执行这些操作并将其缓存在db中。

当该人第一次请求某项内容时,他们会稍等一会,然后出现,但是如果刷新,它会立即更新,然后由于其内部数据库,它现在是每小时更新的一部分最后一个请求之后的24小时内。


您可以创建另一个线程,并在会话或应用程序状态下存储对该线程的引用,具体取决于该线程在每个网站上只能运行一次,还是在每个用户会话中只能运行一次。
然后,您可以将用户重定向到一个他可以监视线程进度的页面。您可以将页面设置为自动刷新,或向用户显示刷新按钮。
线程完成后,您可以向用户发送电子邮件。


  • 您如何查询远程数据?
  • 它多久更改一次?
  • 结果是否可以缓存一段时间?
  • 我们实际上在这里谈论多长时间?
  • "最佳方法"可能在某种程度上取决于这些问题的答案...


    应用程序方法运行查询

    最新内容

    相关内容

    猜你喜欢