0

私は大きなアプリケーションを扱っています。いくつかのスレッドを宣言して開始するフォームの先頭から始まります。

      Thread1 = New Thread(AddressOf Thread1Sub)
      Thread1.Start()

      Thread2= New Thread(AddressOf Thread2Sub)
      Thread2.Start()

Ok。プログラムは、数分、数時間、数日間、問題なく実行できます。しかしその後ランダムに、1 つのレジストリを取得するなどの単純なデータベース ジョブを実行する例外が発生し始めます。

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 ミリ秒で構成されており、非常に奇妙です.

関数が失敗し、例外によってキャッチされるため、ネットワーク関連の問題である可能性があることを始めていますが、次回実行するとうまく機能します。

何かアイデアをいただければ幸いです。

4

0 に答える 0