我有一个处理一个或多个计划任务的后台任务“提交者”:
...
While sdr.read()
...
Dim oBackground As New Background
Task.Run(Sub() CallByName(oBackground, sProcessKey, CallType.Method, iPQID))
End While
在你问之前,是的,任务是线程安全的。 :)
我希望提交者在任务运行时结束(回去睡觉);等待下一次心跳,但我需要捕获并处理每个线程中的异常。
我能做到这一点的唯一方法是为每个后台作业创建一个新任务并在那里处理异常,但这似乎效率低下:
为每个后台作业创建新任务,然后提交实际作业并等待发现错误并处理它:
Private Sub NewJob(sProcessKey, iPQID)
Dim t As Task
....
While sdr.read()
...
Dim oBackground As New Background
t = Task.Run(Sub() CallByName(oBackground, sProcessKey, CallType.Method, iPQID))
Try
t.Wait()
Catch ex As AggregateException
For Each IEx As Exception In ex.InnerExceptions
HandleBackgroundException(IEx, sProcessKey)
Next
End Try
End While
End Sub
有没有更好的方法呢?
谢谢!
答案 0 :(得分:0)
我相信我已经找到了自己问题的答案。
由于每个任务都是自己的线程,因此不需要额外的线程提交。
任务直接运行,错误处理在任务中发生,如上所示(但没有等待')。因此:
Public Shared Sub MyTask()
Try
... do some work here ...
Catch ex As AggregateException
For Each IEx As Exception In ex.InnerExceptions
HandleBackgroundException(IEx, sProcessKey)
Next
End Try
End Sub
那就是它!
我希望这有助于其他人。