【问题标题】:C# Poll() method [duplicate]C# Poll() 方法
【发布时间】:2015-10-13 12:56:16
【问题描述】:

我在 MVC 4.5 项目中创建了一个服务类。在这个类中,我需要启动一个 Poll 方法。

这样做的最佳做法是什么?

这是一个mock up,但需要启动,不推荐使用Thread.Sleep。并且方法应该是全局的,每分钟只调用一次。

    private void Poll()
    {
        Foo("Do somethings");
        Thread.Sleep(60000);
        Poll();
    }

有什么好的建议吗?

【问题讨论】:

  • 这将花费 非常 很长时间,但这最终会引发StackOverflowException。避免使用无限递归方法,这取决于它的作用,可能还有其他方法可以解决它。
  • 我有一种感觉,无论您在做什么,最好在窗口服务中完成,而不是在 ASP.NET MVC 应用程序中完成。
  • 我怀疑你的意思是Poll,而不是Pool。如果是这样,How to run Background Tasks in Asp.Net 可能是一本好书
  • 对不起.. 是的,是民意调查。

标签: c# asp.net-mvc


【解决方案1】:

使用您的方法最终会产生StackOverflowException

您应该利用内置的Timer 类。 你可以find the documentation here

您的使用代码类似于

Timer t = new Timer(o => Foo("Do somethings"), null, 0, 60000);

旁注:

正如@RonBeyer 指出的那样,也许在 ASP.net 中进行轮询可能不是您需要完成的工作的最佳工具。

一个 WCF 长时间运行的服务,例如与您的 ASP.Net 应用程序的 web 挂钩似乎是合适的。同样,这取决于您需要实现的目标。不要犹豫,用更多关于你的最终目标的细节来完成你的问题。

【讨论】:

  • 我不确定Timer 是 ASP 应用程序中的最佳方法...
  • 这取决于应用程序的位置,也取决于应用程序的功能。我会说 ASP.Net 应用程序中的 轮询 是有争议的,是的,但似乎这是 OP 需要做的,他可能有充分的理由这样做。
  • 我会试试这个解决方案。我会回来的。
  • 从客户端调用该方法的最佳做法是,我在 JavaScript 中有一个 poll 函数。
  • 取决于您要实现的目标,但它通常是首选方法。或者使用 Web 套接字进行异步代码
猜你喜欢
  • 2016-10-07
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 2019-03-05
相关资源
最近更新 更多