我有开发 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