我的服务大部分都在正常工作,但它应该每天只工作一次。
为了安排这个,我的老板建议我让工作线程睡到明天早上 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
他说这将在启动时执行一次工作线程,而不是在另一天再次执行。虽然此代码确实可以正常工作,但它不会阻止服务循环一遍又一遍地执行工作线程(目前它在完成第一次运行后立即执行第二次)
就个人而言,我对任何一种方法都持开放态度,但我似乎都无法正常工作。
基本上,我最终需要的只是每天导出一次数据的服务。
我老板的 Thread.Sleep 选项似乎更简单,但我朋友的建议似乎是更好的做法。
谁能帮我解决这个问题(此时我不在乎我使用哪一个,只要它有效)?