私のサービスはほぼ正常に機能していますが、1日1回しか機能しないはずです。
これを調整するために、上司は明日の午前7時までワーカースレッドをスリープ状態にすることを推奨しました。
このThread.Sleep
呼び出しは、明らかに機能する彼が書いた同様のサービスから直接コピーされますが、これは常にArgumentOutOfRangeExceptionをスローします-返される値は負です。
Private Sub startExport()
#If Not Debug Then
Thread.Sleep(1000 * 60 * 1)
#End If
While runReportExport
Try
runExport()
Catch ex As Exception
el.WriteEntry("Error exporting data: {1}")
Finally
'sleep thread until tomorrow 7am
Thread.Sleep(DateTime.Now.Subtract(Date.Today.AddDays(1).AddHours(7)))
End Try
End While
End Sub
私はこれがどのように機能するかについてかなり混乱しているので、誰かが私のために全期間のことを説明することができれば、私はそれを大いに感謝します。
一方、私の友人は、スレッドの実行を別の方法で管理することを勧めています。
これが彼が私に勧めたことです:
Private lastExecute As DateTime = DateTime.Now
Private Overrides Sub OnStart(ByVal args() As String)
startService()
End Sub
Private Sub startService()
Dim nextExecute = lastExecute.AddDays(1)
If nextExecute >= DateTime.Now Then
lastExecute = DateTime.Now
tWorker = New Thread(AddressOf startExport)
tWorker.IsBackground = True
tWorker.Start()
End If
End Sub
彼は、これは起動時に一度だけワーカースレッドを実行し、別の日には再度実行しないと述べました。このコードはエラーなしで機能しますが、サービスループがワーカースレッドを繰り返し実行するのを停止しません(現在、最初の実行が終了するとすぐに2回実行されます)
個人的にはどちらのアプローチにもオープンで、どちらもうまくいかないようです。
基本的に、一日の終わりに必要なのは、1日1回データをエクスポートするサービスだけです。
上司のThread.Sleepオプションの方が簡単なようですが、友人の提案の方が良い方法のようです。
誰かが私がこれを分類するのを手伝ってくれますか(この時点では、それが機能する限り、どちらを使用してもかまいません)?