protected override void OnStart(string[] args)
{
....
timer.Interval = 5000; //number in milisecinds
timer.Enabled = true;
}
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
getData(); // Get data and store into DB
WriteToFile("Service is recall at " + DateTime.Now);
}我尝试创建一个服务来检查和获取电子邮件中的数据。
我上面的代码是平均每5秒就会调用一次getData();。我的函数getData(),用于获取数据并存储到SQL Server中。但有时,我的getData();需要7-8秒才能完成,所以如果timer.Interval = 5 seconds失败了。
我的想法是每隔5秒为call getData()创建新的Thread或Task,并在完成时自动关闭。我该怎么做呢?
或者请给出一些更好的想法或关键词。
发布于 2020-01-16 23:31:13
您可以使用Task.Run()来完成任务上的工作:
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
Task.Run(() => getData());
}但是,可能存在一些线程安全问题,这取决于getData()如何处理它使用的数据。有关任务的更多信息,请访问Task Class at Microsoft Docs
https://stackoverflow.com/questions/59772579
复制相似问题