我有一个 vb.net 服务,它需要一些线程来分别处理每个函数调用并避免时间消耗。
我有 2 个函数需要实现线程:
在问我的问题之前,这是我的两个功能:
1- LaunchTasks() :如果任务启动良好,它会计算该任务的“NextRunDate”,否则会跳过它。
'Dim oThread As Threading.Thread
For Each oRow As DataRow In oDatatable.Rows
Dim oCLASSE_Task As New CLASSE_Task
If oCLASSE_Task.Load(oRow.Item("Mytask")) Then
'oThread = New Threading.Thread(AddressOf oTask.launchSteps)
'oThread.Priority = Threading.ThreadPriority.Normal
'oThread.Start()
Dim oThread = System.Threading.Tasks.Task(Of Boolean).Factory.StartNew(Function() oCLASSE_Task.launchSteps())
End If
Next
' Need to wait until all threads finish
2- 计算运行日期()
'It's called for each object in CLASSE_Task
'Dim oThread As Threading.Thread
For Each oRow As DataRow In oDatatable.Rows
Dim oCLASSE_Task As New CLASSE_Task
If oCLASSE_Task.Load(oRow.Item("Mytask")) Then
Dim oThreadTask = System.Threading.Tasks.Task(Of Boolean).Factory.StartNew(Function() oCLASSE_Task.calculateNextRunDate())
'oThread = New Threading.Thread(AddressOf oTask.calculateNextRunDate)
'oThread.Priority = Threading.ThreadPriority.Normal
'oThread.Start()
End If
Next
' Need to wait until all threads finish
我总是先调用 LaunchTask(),然后再调用 calculateRunDates()(如果我在数据库中获得新记录)。
在启动calculateRunDates() 之前,我必须等待函数LaunchTask() 中的所有线程完成。
如何使用 TPL(我以前从未使用过)来做到这一点,比如 thread.join()?
在这种情况下我应该使用线程还是 TPL?
如何在服务中使用 TPL 处理异常(类似的东西)?
注意:我使用 SyncLock 在我的 CLASSE_Task 中锁定。
没有足够的例子使用 vb.net,主要是 C#。
希望我足够清楚。