gpt4 book ai didi

c# - 如何使Windows服务请求等到上一个请求完成

转载 作者:行者123 更新时间:2023-12-03 13:17:28 25 4
gpt4 key购买 nike

我正在使用窗口服务应用程序,并且我的窗口服务将在特定间隔(例如3分钟)内调用其中一个Web服务。从Web服务中,我将从数据库中获取数据,并使用该数据发送电子邮件。

如果我的数据库表中包含大量行,则发送邮件将需要一些时间。这里有个问题:窗口服务发送第一个请求,它将处理一些记录集。因此,窗口服务在通过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
{

}
}

最佳答案

Monitor类在这种情况下非常有用。这是一个如何使用它的示例:

// 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也有一个重载,它允许您指定进入该节的超时。

关于c# - 如何使Windows服务请求等到上一个请求完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24753799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com