我正在开发一个Web API(它工作得很好)。少了什么东西? 这里是Get
行动的示例代码:在x秒后触发一个事件,但在执行之前也取消它。
public IEnumerable<xxxx> Get()
{
IEnumerable<xxxx> yyyy = new List<xxxx>();
//get yyyy from database
timer = new Timer();
timer.AutoReset = true;
timer.Enabled = true;
timer.Interval = 5000; //miliseconds
timer.Elapsed += timer_Elapsed;
timer.Start();
return yyyy;
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
//code to be executed when timer elapses...
}
因此,一旦接收到请求,定时器将被初始化,并且将在火5秒间隔Elapsed
事件。在这样下去未来后续请求....
预期的行为是这样的:
- 初始化请求-1
- 初始化定时器-1
- 如果来自同一客户的请求被接纳5秒钟,定时器不得触发流逝的事件。
- 如果在5秒内没有收到来自同一个客户端的请求,定时器应该流逝并且触发事件。
此外,计时器与客户无关。
这是与此有关的进一步的业务场景.... 我正在开发一个Web API,开机时将被电子设备使用。只要电源可用,设备将继续发送它的状态。只要用户关闭交换机,就停止对服务器的请求。
无论设备是打开还是关闭,这些状态都会更新到数据库中。现在棘手的部分是确定设备何时关闭(因为如果设备停止发送任何请求,服务器不知道任何事情)。所以每个设备都有一个单独的计时器。
您如何识别客户? –
你想在“Elapsed”中运行什么代码?我认为这是一个XY问题。 –
我真的不需要识别客户端....我的实现与客户端无关。该实施假设,所有客户都是相似的,并且将被提供相同的数据...不过,可以根据其他标准设置多个计时器 –