各関数呼び出しを個別に処理し、時間の消費を避けるためにいくつかのスレッドを必要とする vb.net サービスがあります。
スレッドを実装する必要がある 2 つの関数があります。
私の質問をする前に、ここに私の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-calculateRunDates()
'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() を呼び出します (データベースに新しいレコードを取得した場合)。
関数 LaunchTask() のすべてのスレッドが終了するまで待ってから、calculateRunDates() を開始する必要があります。
thread.join() のような TPL (以前は使用したことがありません) を使用してこれを行うにはどうすればよいですか?
この状況では、スレッドまたは TPL を使用する必要がありますか?
サービスでTPLを使用して例外を処理するにはどうすればよいですか(そのようなもの)?
注: SyncLock を使用して CLASSE_Task をロックしています。
vb.net、主に C# を使用した例は十分ではありません。
私が十分に明確であることを願っています。