如何使用c#asp.net MVC每隔10秒调用一个方法?

如何使用c#asp.net MVC每隔10秒调用一个方法?,c#,asp.net-mvc,asp.net-mvc-4,model-view-controller,C#,Asp.net Mvc,Asp.net Mvc 4,Model View Controller,我一直在尝试每10秒调用一个方法,我读了一些关于计时器和线程的文章,但问题是我不知道该在哪里启动这个方法,MVC项目有一个主线程吗 private async Task ActualizarPrecios() { Entities model = new Entities(); var transaciones = model.Transacciones.Where(a => a.ESTADO == true).ToL

我一直在尝试每10秒调用一个方法,我读了一些关于计时器和线程的文章,但问题是我不知道该在哪里启动这个方法,MVC项目有一个主线程吗

    private async Task ActualizarPrecios()
      {
        Entities model = new Entities();
        var transaciones = model.Transacciones.Where(a => a.ESTADO == 
         true).ToList();
        string Url = ObtenerUrl(model);

        ApiForex.IniciarCliente();

        ProcesarRequest procesar = new ProcesarRequest();
        JObject divisas = await procesar.CargarJson(Url);

        foreach(Transacciones item in transaciones)
        {
          item.PRECIO_ACTUAL = (string)divisas["rates"][item.DIVISA] 
        ["rate"];
        }
        model.SaveChanges();
     }

用于在数据库中上载某些表列的代码。我不知道如何每x秒触发一次此方法

您可能需要研究调度API和第三方工具。Hangfire()是我成功使用的工具之一

您可能需要研究调度API和第三方工具。Hangfire()是一个我已经成功使用的工具

我将使用JavaScript来实现这一点

在视图文件(*.cshtml)的底部添加以下代码:

<script type="text/javascript">
 var interval = 10000; 
 setInterval(function() { Update() }, interval);

 function Update(){
     $.get("/[ControllerName]/ActualizarPrecios", function(){
         alert( "Load was performed.")}
     );
 } 
</script>
此函数用于调用API。它存在于控制器中。您尚未共享控制器名称,因此请相应地替换代码,该方法在我看来像get方法,但是它是
post
,然后将
$.get
更改为
$.post
。url路径后的函数在回调到您的请求时执行。现在,为了在测试过程中弄清楚,它正在运行一行
警报(“加载已执行”)
,这将在浏览器中弹出一个对话框;如果您想在运行请求后将某些内容写入html,您可以在这里这样做


*注:jQuery包含在MVC项目中。在
\shared\\u Layout.cshtml
文件中,您将在页面底部的一个部分看到它的引用

我会使用JavaScript来实现这一点

在视图文件(*.cshtml)的底部添加以下代码:

<script type="text/javascript">
 var interval = 10000; 
 setInterval(function() { Update() }, interval);

 function Update(){
     $.get("/[ControllerName]/ActualizarPrecios", function(){
         alert( "Load was performed.")}
     );
 } 
</script>
此函数用于调用API。它存在于控制器中。您尚未共享控制器名称,因此请相应地替换代码,该方法在我看来像get方法,但是它是
post
,然后将
$.get
更改为
$.post
。url路径后的函数在回调到您的请求时执行。现在,为了在测试过程中弄清楚,它正在运行一行
警报(“加载已执行”)
,这将在浏览器中弹出一个对话框;如果您想在运行请求后将某些内容写入html,您可以在这里这样做

*注:jQuery包含在MVC项目中。在
\shared\\u Layout.cshtml
文件中,您将在页面底部的一个部分看到它的引用

1)如果您的应用程序将在服务器或虚拟机(VM)上托管,则可以在同一服务器或虚拟机上创建窗口服务和注册服务

网址:

2) 如果您的应用程序将在Azure pass上托管,那么您可以将Azure web作业用于相同的应用程序。 Url:

1)如果您的应用程序将在服务器或虚拟机(VM)上托管,则可以在相同的服务器或虚拟机上创建窗口服务和注册服务

网址:

2) 如果您的应用程序将在Azure pass上托管,那么您可以将Azure web作业用于相同的应用程序。
Url:

请解释上述代码试图实现的目标。如果你的应用程序托管在Azure上,那么你可以使用Azure Web作业。否则,使用诸如Hangfire或Quartz之类的第三方LIB可能是有意义的。但是如果只需要定期调用一个方法,那么就可以从
Global.asax
Startup.cs
运行例程。谢谢,这就是我要找的!!请解释上述代码试图实现的目标。如果你的应用程序托管在Azure上,那么你可以使用Azure Web作业。否则,使用诸如Hangfire或Quartz之类的第三方LIB可能是有意义的。但是如果只需要定期调用一个方法,那么就可以从
Global.asax
Startup.cs
运行例程。谢谢,这就是我要找的!!对于加载了该页面的每个web浏览器选项卡,它将每10秒运行一次。这可能是OP想要的,也可能不是OP想要的。对于加载了该页面的每个web浏览器选项卡,它将每10秒运行一次。这可能是OP想要的,也可能不是OP想要的。因为Hangfire需要存储,所以可以通过使用内存存储来简化它:因为Hangfire需要存储,所以可以通过使用内存存储来简化它: