2015-10-13 31 views
-2

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

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

这是一个模拟,但它需要启动,并不推荐Thread.Sleep。该方法应该是全球性的,每分钟只有一个呼叫。

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

有什么建议吗?

+0

它需要很长时间**,但最终会抛出StackOverflowException异常。避免无限递归方法,取决于它的作用,可能有其他解决方法。 –

+2

我有一种感觉,无论你在做什么,最好是在Window Service中完成,而不是在ASP.NET MVC应用程序中完成。 – Luke

+1

我怀疑你的意思是“投票”,而不是“池”。如果是这样,[如何在Asp.Net中运行后台任务](http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx)可能是一个很好的读取 –

回答

2

使用您的方法最终会导致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应用程序似乎是合适的。这又取决于你需要达到什么。不要犹豫,用更多关于你最终目标的细节来完成你的问题。

+5

我不确定'Timer'是ASP应用程序中的最佳方法... –

+0

它取决于应用程序中的哪个部分,它取决于应用程序的功能。我会说,在ASP.Net应用程序中使用_Polling_可能是有争议的,但是,似乎这是OP需要做的事情,他可能有充分的理由去做。 –

+0

我会尝试这个解决方案..我回来。 – AHJ

相关问题