vb.NET线程代码中的随机TimeOuts(任务工厂)

时间:2013-05-22 10:22:36

标签: vb.net multithreading winforms asynchronous timeout

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

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

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

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

0 个答案:

没有答案