如何在asp.net中实现长时间运行的任务

本文关键字:长时间 运行 任务 实现 asp net | 更新日期: 2023-09-27 18:00:08

我正在实现一个ASP。Net 4.0应用程序中,单击按钮1000将对规则进行评估。评估所有规则需要10分钟。

如何在网页中显示进度

这应该允许用户执行其他任务,如取消等。

评估完所有规则后,需要更新页面中的数据并显示消息。

如何在ASP中实现此功能。Net

如何在asp.net中实现长时间运行的任务

您可以使用MS的signaler框架来实现这一点。例如,我们在产品中的安装过程中就这样做了。也是一个漫长的过程。由于产品是开源的,您可以在以下位置检查实现:

https://github.com/VirtoCommerce/vc-community/blob/master/src/Presentation/FrontEnd/StoreWebApp/Areas/VirtoAdmin/Views/Install/Index.cshtml

希望这能有所帮助。

在这种情况下,我个人的建议是使用简单的ajax请求

例如,您可以调用第一个加载调用,它将负责初始化任务

在会话中保存此任务的值,例如幻想名称session("taksprogress")="0"您将用这个值更新您的进度条

第二,在页面上启动一个计时器,每五秒钟检查一次,并只报告会话的实际状态("任务进度")。

当它返回由您定义的值时,您将向客户端显示您的消息。

它会帮助你更多,而且实现起来非常简单。请注意,如果要使用ashx文件,则必须在会话的读/写模式下启用访问权限。还有许多其他方法可以通过类、包括文本消息的json响应等来实现:)我希望这能帮助你选择正确的方式。

嗨,湿婆,根据你最后的评论,在这种情况下最好选择ajax假设这种情况:

  1. 按钮"START"使ajax调用.aspx/ashx(我更喜欢它),它负责运行长任务
  2. 按钮"CANCEL",它将用于进行另一个ajax调用以停止长任务
  3. 进度条,将更新一些信息
  4. 在这一点上,您需要制作一些javascript函数来处理更新进度条等的需要

在这个例子中,你将有一个调用来启动任务以停止taks。一个调用到重试状态。你可以假设在你的ashx文件中,你可以根据你的需要传递许多参数

http://domain.com/ajax/longtask.ashx?task=start

http://domain.com/ajax/longtask.ashx?task=update

http://domain.com/ajax/longtask.ashx?task=cancel

在这种情况下,您可以使用一个ajax调用来完成所有的工作,面对被调用的任务,您可以在javascript中使用switch案例来详细说明。

您还必须创建一个单独的功能,使计时器能够以规定的时间间隔呼叫服务,如2秒1秒5秒

当任务将运行时(任务=启动),它将用新值更新会话,并且通过更新,您只能从会话中检索此数据

在任务取消的情况下,您将在会话中设置一个标志,告诉您的过程退出并返回结果,该结果通过json格式的ajax

这都是

检查您的逻辑、构造和类,以确保您可以以简单的方式实现此logi。您还可以在示例MonitoringLongTask中创建一个自定义类,该类公开了多个信息,因此每次需要通信/检索时,您只需要更新"MonitoringLongTask"类属性。

我希望它能帮助你

更新你的最后一条评论:

不确定是否理解Siva,你的意思是你发布了一些表格中的数据,然后可以运行评估??没有问题,相同的东西或更好的2个不同的ajax调用其他任何东西。第一个ajax调用将数据发送到数据库并对其进行详细说明,并将成功函数中的ok或failed返回到ajax调用中。调用您的第二个函数来启动绑定两个调用的任务。您可以创建一个自定义令牌来传递给第一个响应,该令牌将添加到第二个调用中。例如:firt调用http://domain.com/ajax/lng.ashx?task=store&param1=0&param2=1等等,它将返回一个简单的令牌,例如从数据库中获取的用于该特定任务的guid或id,并将其作为参数在2调用中传递,如http://domain.com/ajax/lng.ashx?task=start&uid=您的代币