在ASP.NET Web应用程序中创建线程的正确方法

我正在创建asmx Web服务,并且必须创建线程来执行后台IO来刷新系统数据。 什么是正确的方法? 我对创建线程没有任何结果感兴趣。 我只是希望ASP.NET工作线程创建一个执行它加载的线程,最后进行一次分配(我认为分配_alldata = newData是primefaces,我自己的大结构类SystemData的两个实例)所以创建的工作线程新线程可以立即传播。

我读了一篇文章http://msdn.microsoft.com/fi-fi/magazine/cc164128%28en-us%29.aspx#S2 ,建议使用非线程池线程。 然而,文章是关于不同/更复杂的情况,并没有帮助我这么多。

谢谢:马蒂

PS。 我也问过这个问题, 在asmx web服务中为数据库IO生成线程的正确方法是什么? 但这个问题太复杂了。

像这样的东西:

public delegate void Worker(); private static Thread worker; public static void Init(Worker work) { worker = new Thread(new ThreadStart(work)); worker.Start(); } public static void Work() { // do stuff } 

然后通过调用Init(Work)

如果调用BeginInvoke()ThreadPool.QueueUserWorkItem() ,它将使用ASP.NET线程池线程,这可能会影响应用程序的可伸缩性。

如果它有用,我会在本书中详细介绍这些问题,以及代码示例,示例基准测试等: Ultra-Fast ASP.NET 。

看一眼:

http://www.codeproject.com/KB/cs/AsyncMethodInvocation.aspx?fid=326357&df=90&mpp=25&noise=3&sort=Position&view=Quick

你可以这样做:

  public delegate void MethodInvoker(); private void Foo() { // sleep for 10 seconds. Thread.Sleep(10000); } protected void Button2_Click(object sender, EventArgs e) { // create a delegate of MethodInvoker poiting to // our Foo function. MethodInvoker simpleDelegate = new MethodInvoker(Foo); // Calling Foo Async simpleDelegate.BeginInvoke(null, null); }