以设定的间隔从服务器调用方法

本文关键字:服务器 调用 方法 | 更新日期: 2023-09-27 18:10:07

我正在编写一些代码,其中调用GetRoomAvailability()后从mvc动作方法,然后返回一个视图(mvc)到客户端。该方法创建一个新线程。以便每隔50分钟调用_repository.roomsAavailability()。我希望这个计时器在后台线程上继续调用这个存储库,而不必每隔50分钟在UI线程上再次调用getroomavailability()。我该怎么做呢?此刻

public void GetRoomAvailability()
{
    // checl for room availability every 30 minutes
    Timer timer = new Timer((e) =>
    {
        _repository.RoomAvailability();
        if (true)
        {
            // write some code to see if values have been changes since last time
            //_hub.ClientsUpdateRoomsAvailability();
        }
    }, null, 0, TimeSpan.FromMinutes(0.5).Milliseconds);
}

在调用GetRoomAvailability()时只调用一次。

以设定的间隔从服务器调用方法

不要使用Timer并尝试自己完成此操作。有很多陷阱。

相反,使用像Quartz这样的包。. NET设置一个循环的后台任务。这篇Scott Hanselman的文章给出了例子和更多细节。

不要忘记,您需要设置IIS以保持应用程序的活动。如果你写这篇文章是为了共享主机,那它是不可能的

方法完成后,您没有保持对计时器的引用,我的猜测是计时器正在被垃圾收集器处理,因为没有对它的引用