我正在处理一个大型应用程序。它从声明和启动一些线程的表单的开始处开始:
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
随机地,我开始收到超时电子邮件,因为从数据库中恢复简单DataSet的任务正在超时(谁在50000毫秒内配置,这非常奇怪。
我开始讨论它可能是与网络相关的问题,因为该函数失败并被异常捕获,但下次执行它时效果很好。
如果你给我一些想法,我会很高兴的。