我正在处理一个大型应用程序。它从声明和启动一些线程的表单开始:
Thread1 = New Thread(AddressOf Thread1Sub)
Thread1.Start()
Thread2= New Thread(AddressOf Thread2Sub)
Thread2.Start()
好的。该程序可以毫无问题地运行几分钟、几小时、几天。但随后随机我们开始得到一个异常,执行琐碎的数据库工作,比如获取一个注册表。
我怀疑 GetRegistry 数据库操作是错误的,因为它可以执行一千次,甚至在我开始收到 timeoutException 之前还要执行更多次。
由于这个挂起开始,我改变了有问题的函数调用,我目前正在开始一个新任务,如下所示:
Dim TokenCancel As New CancellationTokenSource
Dim taskConta = Tasks.Task(Of DataSet).Factory.StartNew(
Function() myFunc(param1, param2),
TokenCancel.Token, Tasks.TaskCreationOptions.LongRunning)
If taskConta.Wait(ThreadTimeOut) Then
datos = taskConta.Result
Else
Throw New TimeoutException("TimeOut")
End If
我调用的函数非常简单:
Private Function myFunc(ByVal param1 As Decimal, ByRef param2 As DatabaseObject) As DataSet
DatabaseObject= New DatabaseObjectClass
Dim datos As DataSet = DatabaseObject.GetRegistry(param1)
Return datos
End Function
随机地,我开始收到超时电子邮件,因为从数据库中恢复简单数据集的任务正在超时(谁在 50000 毫秒内配置,这很奇怪。
我开始认为它可能是与网络相关的问题,因为该函数失败并且它被异常捕获,但下次如果执行它会很好。
如果你能给我一些想法,我会很高兴。