В проекте, который я недавно принял, есть вызов функции, которая выполняет некоторые вычисления; это вызывается в строке несколько раз (обычно от 1 до 10 раз).Рекомендации по обработке фона в vb.net
While dr.read ‘depending on a db call, loop 1 or more times
Dim calc As New CalcClass
Dim newDoStuff As New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf DoStuff))
newDoStuff.Start(calc)
End while
Private Sub DoStuff(ByVal calc As Object)
‘do something that takes between 5-10 seconds
End sub
Для того, чтобы ускорить этот процесс, я пытаюсь добавить асинхронную обработку (см выше примере), это работает в моем коде, все задачи выполняются одновременно, но то, что я не понимаю, как дождаться завершения всех этих потоков (нет заданного количества потоков, оно может быть от 1 до 10 в зависимости от некоторых других данных), прежде чем заканчивать конечную задачу, которая должна запускаться после завершения всех задач.
Может кто-нибудь предложить способ сделать это - я ищу простой способ в основном говорят «Хорошо, все задачи закончены в данный момент, вызвать другую задачу»
Cliffs
- несколько задач необходимо запустить одновременно (между 1 и 10)
- Каждая задача занимает несколько секунд
- код в настоящее время работает - это делает их все в то же время
- После все задачи (между 1-10) закончены, выпалить некоторый другой код (только тогда, когда все задачи закончены) - застрял на лучший способ сделать следующее
Если вы можете, я бы переработать это использовать библиотеку задач бейфут. Однако метод ожидания других потоков называется 'Join '. Читайте об этом здесь: http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx – asawyer
Я не знаю, как подождать нить до конца без использования обратных вызовов. Я предлагаю не запускать поток для каждой задачи, возможно, объединить их в несколько задач и сообщить о статусе в каждой группе. –
@asawyer - Пока ваш совет звучит. TPL не готов к прайм-тайм. Он будет содержаться в .NET Framework 4.5 из моего понимания. Ему не нужно использовать TPL для использования метода Thread.Join. Вы должны быть осторожны с Thread.Join, вы можете легко заставить себя Тупик. –