2009-08-25 31 views
1

我有一个不重要的任务;如果使用该网站,它应该在一段时间内运行。ASP.NET/Debug中的后台任务

所以,我想这个办法:http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

任务可能很长,所以我想这是异步的......,这样的导航是不是由后台任务停止。

我不明白的是,当我开始调试(附加到进程w3wp.exe),我不能在网站上导航,直到我停止调试?

下面是代码(ResourceService是在同一个项目上ISS托管的WCF服务):

private void CacheItemRemoved(string taskName, object seconds, CacheItemRemovedReason r) 
    { 
     switch (taskName) 
     { 
      case MedianamikTasks.UpdateResources: 
       if (Config.EnableAutoResourceUpdate) 
       { 
        ThreadStart threadStart = ResourceService.UpdateResources; 
        var thread = new Thread(threadStart) {IsBackground = true}; 
        thread.Start(); 

        //Do not use... : http://csharpfeeds.com/post/5415/Dont_use_the_ThreadPool_in_ASP.NET.aspx 
        //ThreadPool.QueueUserWorkItem(x => ResourceService.UpdateResources()); 
       } 
       break; 
     } 

     AddTask(taskName, Convert.ToInt32(seconds)); 
    } 

回答

2

我不明白的事情是,当 我开始调试(附加到 过程的w3wp.exe)我可以” t请继续导航 该网站,直到我停止 调试?

只是猜测,但是你有没有设置断点?一旦你到达一个断点,w3wp进程中的执行就会停止,因此你将无法在站点周围“导航”。

+0

如果我明白:线程包含在(w3wp)进程中(进程?),这样即使任务在另一个线程中启动并且是异步的,在调试期间停止在断点上(在异步任务中)进程的线程(因此我无法再导航)? – W3Max 2009-08-27 01:27:16

+0

当您正在调试时,您可以查看VS中的菜单项:Debug | Windows | Threads,以查看并在该进程拥有的所有线程之间切换。是的,他们都会被暂停。希望能帮助你。 – 2009-08-27 04:17:28

1

使用后台工作。

BackgroundWorker worker; 
worker = new BackgroundWorker(); 
worker.DoWork += new DoWorkEventHandler(worker_DoWork); 
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); 
worker.RunWorkerAsync(); 

然后在DoWork的处理程序调用该方法,你需要