【发布时间】:2012-02-08 15:08:06
【问题描述】:
对不起,如果这是一个很长的问题,我需要一些关于人们认为最好的方法的建议(因为有一些)。
目前,我的项目有一个方法
do_job(jobid,userid)
此方法需要一两分钟,然后重定向到另一个页面。
这已被重写,现在它在后台运行并重定向到另一个页面,同时 do_job 所在的线程继续运行。 - 这很好用。
在 default.aspx 页面中的 button_click 事件中:
Dim d as New do_job_delegate(AddressOf do_job)
d.BeginInvoke(jobid,userid, New AsyncCallback(AddressOf Callback),d)
Response.redirect("results.aspx")
涉及到
Delegate Sub do_job_delegate(Byval jobid as integer, Byval userid as integer)
Public Sub do_job(Byval jobid as integer, Byval userid as integer)
' Do something for several seconds
End Sub
Public Sub Callback(Byval ar As IAsyncResult)
ar.AsyncState.EndInvoke(ar)
End Sub
这基本上就是我想要的,用户可以在网站上继续做事,do_job方法在后台运行并成功完成其任务。
但是,我现在已经添加到这个 do_job 方法中,并且有几个小任务,每个在 do_job 中需要 30 秒左右,并且可以/应该使它们并行运行。 例如
Public Sub do_job(Byval jobid as integer, Byval userid as integer)
loop through between 1 or more (up to roughly 10 items)
'process that takes about 30 seconds
end loop
End Sub
所以我想要发生的是 - do_job 花费的最长时间是最长作业的最长时间(30 秒),而不是 - 30 秒 x 作业数 = 目前所需的时间。
由于我已经在使用委托从 ui 中分离流程,任何人都可以就我应该如何重新安排我的 do_job 方法提供任何建议/最佳实践,以便它可以处理并发任务以进一步提高整体速度。
谢谢!
【问题讨论】:
标签: asp.net vb.net delegates asp.net-2.0 background-process