0

我有开发 Windows 服务的经验,其中不同的方法在不同的时间间隔上执行,每种方法使用不同的计时器。然而,我最近遇到了一个使用 System.Threading.Tasks 和 ManualResetEvent 做同样事情的 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