メソッドごとに異なるタイマーを使用して、異なる時間間隔で異なるメソッドが実行されるWindowsサービスを開発した経験があります。しかし、私は最近、System.Threading.Tasks と ManualResetEvent を使用して同じことを行う 1 つの Windows サービスに出くわしました。私はこれらについてあまり知識がありません。以下は、Windows サービスの作成方法を示すコードです。onstart と実行されるメソッドのみを含めました。コンソール アプリケーションをチェックインしましたが、waitone が原因でタスクがブロックされません。しかし、私が言ったように、タスクの技術的な知識はあまりないので、さまざまなメソッドがさまざまな間隔で実行されるウィンドウサービスに対して、次のアプローチが正しいか間違っているかについて意見が必要です。
Private Shared mReset As New ManualResetEvent(False)
Protected Overrides Sub OnStart(ByVal args() As String)
Try
mReset.Reset()
Dim task1 As Task = Task.Factory.StartNew(New Action(AddressOf Task1), TaskCreationOptions.PreferFairness)
Dim task2 As Task = Task.Factory.StartNew(New Action(AddressOf Task2), TaskCreationOptions.PreferFairness)
Catch ex As Exception
'Throw ex
WriteMessage(ex.Message)
End Try
End Sub
Private Sub Task1()
Try
Dim WaitTime As Integer = 24 * 60 * 60 * 1000
While Not mReset.WaitOne(WaitTime)
Try
' Perform Some Task Daily
Catch ex As Exception
WriteMessage(ex.Message)
WriteMessage(ex.StackTrace.ToString)
End Try
End While
Catch ex As Exception
WriteMessage(ex.Message)
WriteMessage(ex.StackTrace.ToString)
End Try
End Sub
Private Sub Task2()
Try
While Not mReset.WaitOne(60000)
Try
'Perform some operation per minute
Catch ex As Exception
WriteMessage(ex.Message)
WriteMessage(ex.StackTrace.ToString)
End Try
End While
Catch ex As Exception
WriteMessage(ex.Message)
WriteMessage(ex.StackTrace.ToString)
End Try
End Sub