我正在处理一个窗口服务应用程序,我的窗口服务将在一定的时间间隔内调用其中一个web服务(例如,3分钟)。从web服务中,我将从数据库中获取数据,并使用这些数据发送电子邮件。
如果我的db表中有大量的行,那么发送邮件需要一些时间。这里我有一个问题:窗口服务发送第一个请求,它将处理一些记录集。因此,在web服务处理它时,窗口服务在完成第一个请求之前向web服务发送另一个请求。因此,每当web服务收到来自windows服务的新请求时,它都会一次又一次地从db获得相同的记录。
有谁能建议我如何锁定之前的请求,直到它完成它的工作或其他方式来处理这种情况?
Web服务调用:
protected override void OnStart(string[] args)
{
timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
timer.Interval = 180000;
timer.AutoReset = false;
timer.Enabled = true;
}内部方法
using (MailWebService call = new MailWebService())
{
try
{
call.ServiceUrl = GetWebServiceUrl();
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
call.CheckMailQueue();
}
catch (Exception ex)
{
LogHelper.LogWriter(ex);
}
finally
{
}
}发布于 2014-07-16 06:32:17
监视器类对于这个场景非常有用。下面是如何使用它的一个示例:
// This is the object that we lock to control access
private static object _intervalSync = new object();
private void OnElapsedTime(object sender, ElapsedEventArgs e)
{
if (System.Threading.Monitor.TryEnter(_intervalSync))
{
try
{
// Your code here
}
finally
{
// Make sure Exit is always called
System.Threading.Monitor.Exit(_intervalSync);
}
}
else
{
//Previous interval is still in progress.
}
}TryEnter也存在过载,允许您指定输入区段的超时。
https://stackoverflow.com/questions/24753799
复制相似问题