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

时间:2019-06-20 23:01:22

标签: c# asp.net-mvc asp.net-mvc-4 model-view-controller

我一直想每10秒调用一次方法,我读到了有关计时器和线程的信息,但问题是我不知道将方法触发的位置,MVC项目有Main吗?

    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秒触发一次此方法

3 个答案:

答案 0 :(得分:2)

您可能想研究调度API和第三方工具。 Hangfire(https://www.hangfire.io/)是我成功使用的一种

答案 1 :(得分:0)

我将使用JavaScript实现这一目标。

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

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

 function Update(){
     $.get("/[ControllerName]/ActualizarPrecios", function(){
         alert( "Load was performed.")}
     );
 } 
</script>

说明:

<script type="text/javascript">

  

这是您使用JavaScript语言编写脚本的HTML节点

var interval = 10000; setInterval(function() { Update() }, interval);

  

将时间间隔设置为10秒(以毫秒为单位)

     

然后使用JavaScript函数按一定间隔重复执行,请参见W3 Schools

function Update(){
     $.get("/[ControllerName]/ActualizarPrecios", function(){
         alert( "Load was performed.")}
     );
 } 
  

此函数使用Ajax中的jQuery来调用API。哪个存在于您的控制器中。您尚未共享控制器名称,因此请相应地替换代码,该方法对我来说似乎是一种get方法,但是它是post,然后将$.get更改为$.post。 url路径后的函数在对您的请求的回调中执行。现在,为了使其在测试期间清晰可见,它正在运行第alert( "Load was performed.")行,这将在浏览器中弹出一个对话框。如果您想在运行请求后将某些内容写到html中,则可以在此处进行操作。

*请注意,jQuery已包含在MVC C#项目中。在\shared\_Layout.cshtml文件中,您会在页面底部的部分中看到它的引用。

答案 2 :(得分:0)

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

网址:https://www.aspsnippets.com/Articles/Simple-Windows-Service-that-runs-periodically-and-once-a-day-at-specific-time-using-C-and-VBNet.aspx

2)如果您的应用程序要托管在Azure pass上,则可以使用Azure web作业。 网址:https://docs.microsoft.com/en-us/azure/app-service/webjobs-create