0

メソッドごとに異なるタイマーを使用して、異なる時間間隔で異なるメソッドが実行される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
4

0 に答える 0