私は大きなアプリケーションを扱っています。いくつかのスレッドを宣言して開始するフォームの先頭から始まります。
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 ミリ秒で構成されており、非常に奇妙です.
関数が失敗し、例外によってキャッチされるため、ネットワーク関連の問題である可能性があることを始めていますが、次回実行するとうまく機能します。
何かアイデアをいただければ幸いです。