ASP.NET / Debug中的后台任务

时间:2009-08-25 13:35:11

标签: c# asp.net debugging asynchronous

我的任务并不重要;如果使用网站,它应该运行一次。

所以我尝试了这种方法: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 个答案:

答案 0 :(得分:2)

  

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

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

答案 1 :(得分:1)

使用后台工作人员。

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

然后在DoWork处理程序中调用您需要的方法