0

我正在处理一个大型应用程序。它从声明和启动一些线程的表单开始:

      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 毫秒内配置,这很奇怪。

我开始认为它可能是与网络相关的问题,因为该函数失败并且它被异常捕获,但下次如果执行它会很好。

如果你能给我一些想法,我会很高兴。

4

0 回答 0