VB.net页面多线程处理问题,前端发出请求后,后端进行一个长时间的数据处理,不需要等结果就立刻返回一个结果给前端

azaho 2018-09-04 09:39:14
现在的情况是这样的,前端有一个按钮,用户点击按钮后就会执行一段比较长时间的sql存储过程,但是目前的情况是用户点下按钮之后需要等待后台把存储过程执行后返回一个结果才能离开当前页面进行其他操作。能不能用多线程的方法,在前端发送请求后,后台就开始运行存储过程,同时不需要等待存储过程处理完成就立刻返回前端一个返回值。这样用户点完之后就能继续进行其他操作,存储过程也能在后台继续运行。最好能举个例子
...全文
501 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
azaho 2018-09-05
  • 打赏
  • 举报
回复
引用 4 楼 Runnerchin 的回复:
前端AJAX直接提交数据,后端收到以后起一个Task慢慢处理,然后立马返回,所有的逻辑都在Task里。
你好,能写下代码大概怎么实现吗,对于起一个Task并立马返回这个还是不是很懂
X-i-n 2018-09-05
  • 打赏
  • 举报
回复
Public Class HomeController
Inherits System.Web.Mvc.Controller

''' <summary>
''' 根据id查询处理结果
''' </summary>
''' <returns></returns>
Function Index(Optional Id As Integer = 0) As ActionResult
'根据Id查找是否有对应任务
'如果有就读取进度和状态, 如果没有就直接返回没有(具体按实际业务流程来)
Return View()
End Function

''' <summary>
''' 前端页面,通过这个页面提交耗时任务给后台处理
''' </summary>
''' <returns></returns>
<HttpGet>
Function Query() As ActionResult
'前端页面
Return View()
End Function

''' <summary>
''' 耗时任务处理后台,处理的同时,实时更新进度,供Index这个Action里查询
''' </summary>
''' <param name="Year0"></param>
''' <param name="Year1"></param>
''' <returns></returns>
<HttpPost>
Function Query(Year0 As Integer, Optional Year1 As Integer = 0) As ActionResult
Year1 = IIf(Year1 = 0, DateTime.Now.Year, Year1)
Task.Run(Sub()
'在这儿写耗时比较长的步骤(比如查询数据并生成报表,比如生成可供下载的文件)
'并且在处理过程中实时更新进度
'比如向Redis里写入任务总步骤数、当前步骤、总记录数、已处理记录数
End Sub)
Return Content("已经提交处理")
'Return Content("提交数据非法")
'这儿最好是返回一个Json对象,方便前端处理
End Function
End Class
X-i-n 2018-09-04
  • 打赏
  • 举报
回复
前端AJAX直接提交数据,后端收到以后起一个Task慢慢处理,然后立马返回,所有的逻辑都在Task里。
azaho 2018-09-04
  • 打赏
  • 举报
回复
引用 1 楼 Runnerchin 的回复:
假设有一个非常大的数据库,用户想生成过去5年的一项业务的报表,预计耗时3分钟:
用户在 /Report/Query 页面填写好查询条件以后直接点“提交”,把请求提交到 /Report/Query?var1=xx&var2=xx ,后台判断查询条件的合法性,给出提示“后台正在处理”,并且提醒用户可以在任何时间访问 /Report?id=2222页面展示任务状态“非法的任务ID”/“查询中”/“查询完毕+报表内容”。

那我后台的代码要怎样实现,就像例子中说的,能返回前端"后台正在处理",后端也会在运行报表这段代码
azaho 2018-09-04
  • 打赏
  • 举报
回复
那我后台的代码要怎样实现,就像例子中说的,能返回前端"后台正在处理",后端也会在运行报表这段代码
X-i-n 2018-09-04
  • 打赏
  • 举报
回复
假设有一个非常大的数据库,用户想生成过去5年的一项业务的报表,预计耗时3分钟:
用户在 /Report/Query 页面填写好查询条件以后直接点“提交”,把请求提交到 /Report/Query?var1=xx&var2=xx ,后台判断查询条件的合法性,给出提示“后台正在处理”,并且提醒用户可以在任何时间访问 /Report?id=2222页面展示任务状态“非法的任务ID”/“查询中”/“查询完毕+报表内容”。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧