Извините, если это довольно длинный вопрос, мне нужен совет о том, что люди считают лучшим методом (как есть несколько).
На данный момент в моем проекте есть метод
do_job(jobid,userid)
Этот метод занимает минуту или две, а затем перенаправляет на другую страницу.
Этот текст был переписан так, что теперь он работает в фоновом режиме и перенаправляет на другую страницу, пока поток, который делает do_jobпродолжается- Это прекрасно работает.
В событии button_click на странице default.aspx:
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, и есть несколько небольших задач, каждая из которыхзанимает около 30 секунд в do_job, и они могут / должны быть сделаны для параллельной работы.например,
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 количество заданий = время, которое требуетсяна данный момент.
Поскольку я уже использую делегата для отсоединения процесса от пользовательского интерфейса, может ли кто-нибудь дать какой-либо совет / наилучшую практику о том, как мне следует перестроить свой метод do_job, чтобы он мог обрабатывать параллельные задачи длядальнейшее повышение общей скорости.
Спасибо!