Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从服务器以设置的间隔调用方法_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 从服务器以设置的间隔调用方法

C# 从服务器以设置的间隔调用方法,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在编写一些代码,在从mvc操作方法调用GetRoomAvailability()之后,将视图(mvc)返回给客户端。该方法创建一个新的threading.timer类,以便每50分钟调用一次_repository.roomsAavailability()。我希望此计时器继续在后台线程上调用此存储库,而不必每隔50分钟在UI线程上再次调用GetRoomAvailability()。我该怎么做?此刻 public void GetRoomAvailability() { // checl

我正在编写一些代码,在从mvc操作方法调用GetRoomAvailability()之后,将视图(mvc)返回给客户端。该方法创建一个新的threading.timer类,以便每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()时,只调用一次。方法完成后,您没有保留对计时器的引用,我猜计时器正在被垃圾收集器处理,因为没有对它的引用。请不要使用
计时器
,自己尝试这样做

相反,请使用类似于设置定期后台任务后台的包。给出了示例和更多细节


别忘了,您需要设置IIS以使应用程序保持活动状态。如果您是为了共享主机而写的,那么这是不可能的。

您可能需要查看一些Thinkg,比如SignalR,以实时获取数据,而不是使用计时器……谢谢。根据您的推荐信,我使用Quartz.net成功地实现了这一点