對不起,如果這是一個相當長的問題,我需要一些關於人們認爲是最好的方法(因爲有一些)的建議。在.Net中的後臺處理 - 需要建議
此刻,我的項目有一個方法
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
所以我希望發生的是什麼 - 30秒就業x個=時間花費在 - 這do_job需要的是時間最長的工作時間最長(30秒),而不是最長的時間此時此刻。
由於我已經在使用委託從UI分離進程,任何人都可以提供任何建議/最佳做法,我應該如何重新安排我的do_job方法,以便它可以處理併發任務以進一步提高總體速度。
謝謝!
感謝您的快速回復,不幸的是我被困在這個當前工作的asp 2.0上。 – norbert 2012-02-08 15:23:17
@AndyGreen然後去服務。 .NET的一個好處是你可以使用你已經熟悉的語言等來構建它。 – 2012-02-08 15:27:25
如果您的組織允許,您可以始終使用.net 4服務,同時將網絡保留爲2.0。如果你的組織不允許,找一份新工作。 :) – BNL 2012-02-08 15:28:07