Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net中实现长时间运行的任务_C#_Asp.net_Multithreading_Progress_Long Running Processes - Fatal编程技术网

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

C# 如何在asp.net中实现长时间运行的任务,c#,asp.net,multithreading,progress,long-running-processes,C#,Asp.net,Multithreading,Progress,Long Running Processes,我正在实现一个ASP.NET4.0应用程序,在该应用程序中,单击按钮将评估1000条规则。评估所有规则需要10分钟 如何在网页中显示进度。 这应该允许用户执行其他任务,如取消等。 评估所有规则后,需要更新页面中的数据,并显示一条消息 我如何在ASP.Net中实现这一点?您可以使用微软的signalr框架实现这一点。我们这样做是为了在我们的产品中进行安装过程。这也是一个长期运行的过程。由于产品是开源的,您可以在以下位置检查实现: 希望这有帮助。在这种情况下,我个人的建议是使用简单的ajax请求

我正在实现一个ASP.NET4.0应用程序,在该应用程序中,单击按钮将评估1000条规则。评估所有规则需要10分钟

如何在网页中显示进度。

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

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


我如何在ASP.Net中实现这一点?您可以使用微软的signalr框架实现这一点。我们这样做是为了在我们的产品中进行安装过程。这也是一个长期运行的过程。由于产品是开源的,您可以在以下位置检查实现:


希望这有帮助。

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

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

将会话a中的值保存到示例fantasy name会话(“taksprogress”)=“0”中的此任务 您将使用此值更新进度条

第二,启动页面上的计时器,每五秒钟检查一次,并仅报告更新检查会话的实际状态(“任务进度”)

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

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

Hi Shiva,根据您最后的评论,最好选择ajax在这种情况下假设这种情况:

  • 按钮“START”以进行对.aspx/ashx(我更喜欢)的ajax调用,它负责运行长任务
  • 按钮“CANCEL”,用于进行另一个ajax调用以停止长任务
  • 将使用一些信息更新的进度条
  • 此时,您需要使用一些javascript函数来处理更新进度条等需要
  • 在示例中,您将有一个调用来启动任务,停止taks,一个调用来检索状态。您可以假设在ashx文件中,您可以根据需要在示例中传递许多参数

    在本例中,您可以使用一个ajax调用来完成所有工作,并且面对调用的任务,您可以使用javascript中的切换用例来详细说明

    您还必须创建一个函数来启用计时器以定义的间隔(如2秒1秒5秒)调用服务

    当任务运行(task=start)时,它将使用新值更新会话,而使用update,您也只能从会话中检索此数据

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

    就这些

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

    我希望它能帮助你

    最新评论:

    不确定是否理解Siva,您的意思是您发布表单中的一些数据,然后可以运行评估吗??没有问题相同的东西或更好的2个不同的ajax调用没有其他。第一个ajax调用将数据发送到数据库并对其进行详细说明,并在成功函数中返回ok或failed到ajax调用您的第二个函数,该函数启动任务绑定两个调用您可以创建一个自定义令牌传递到第一个响应,该令牌将添加到第二个调用中示例:firt call等,它将返回一个简单的令牌,例如从数据库中获取的用于此特定任务的guid或id,并在2调用中作为参数传递


    请提出一个具体的问题,并向我们展示您的代码。这实际上相当困难。问题是,如果您通过asp.net和IIS运行10m请求,则在生成它的HTTP请求完成后,它可以随时终止。因此,您需要将服务器上的服务与asp.net分开,并使其以某种方式与主web服务器应用程序通信。此外,在asp.net页面中这样做是一个坏主意。让页面将请求排队到将运行该请求的服务。确保在用户按下F5时,服务不会执行两次10分钟任务。然后,进度条可以监控服务的进度。有很多方法,ajax请求/s、多线程、服务器上的服务,这取决于您需要的类型。例如,您可以进行一次ajax调用,调用一个页面,该页面负责在多线程中执行所有规则验证(如果可能),连接到服务器服务并从中获得响应,等等……您可以给我们提供更多信息吗?评估是按特定顺序完成的,还是可以分为多个任务/线程,这样可以减少总的工作时间?您告诉我们的越多,我们就可以帮助您感谢回复。所有规则都需要按特定顺序进行评估。但是,用户应该可以随时取消规则评估过程。当规则评估完成/中止时,需要使用评估规则结果更新同一页面中的其他一些数据。谢谢。这里还有一个问题,页面中的数据需要保存到数据库中,然后才应该开始规则评估。如果是Ajax调用,我如何实现这一点?检查响应更新:)