我在MVC 4.5项目中创建了一个服务类。在这个类中,我需要启动一个轮询方法。C#Poll()方法
这样做的最佳做法是什么?
这是一个模拟,但它需要启动,并不推荐Thread.Sleep。该方法应该是全球性的,每分钟只有一个呼叫。
private void Poll()
{
Foo("Do somethings");
Thread.Sleep(60000);
Poll();
}
有什么建议吗?
我在MVC 4.5项目中创建了一个服务类。在这个类中,我需要启动一个轮询方法。C#Poll()方法
这样做的最佳做法是什么?
这是一个模拟,但它需要启动,并不推荐Thread.Sleep。该方法应该是全球性的,每分钟只有一个呼叫。
private void Poll()
{
Foo("Do somethings");
Thread.Sleep(60000);
Poll();
}
有什么建议吗?
使用您的方法最终会导致StackOverflowException
。
您应该利用内置的Timer
类。 您可以find the documentation here。
你使用的代码会是这样的
Timer t = new Timer(o => Foo("Do somethings"), null, 0, 60000);
旁注:
由于@RonBeyer指出,也许在ASP.net投票可能不适合这个职位的最佳工具,您需要完成。
一个WCF长时间运行的服务,例如使用web-hooks到你的ASP.Net应用程序似乎是合适的。这又取决于你需要达到什么。不要犹豫,用更多关于你最终目标的细节来完成你的问题。
我不确定'Timer'是ASP应用程序中的最佳方法... –
它取决于应用程序中的哪个部分,它取决于应用程序的功能。我会说,在ASP.Net应用程序中使用_Polling_可能是有争议的,但是,似乎这是OP需要做的事情,他可能有充分的理由去做。 –
我会尝试这个解决方案..我回来。 – AHJ
它需要很长时间**,但最终会抛出StackOverflowException异常。避免无限递归方法,取决于它的作用,可能有其他解决方法。 –
我有一种感觉,无论你在做什么,最好是在Window Service中完成,而不是在ASP.NET MVC应用程序中完成。 – Luke
我怀疑你的意思是“投票”,而不是“池”。如果是这样,[如何在Asp.Net中运行后台任务](http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx)可能是一个很好的读取 –