【问题标题】:Background Tasks in ASP.NET / DebugASP.NET 中的后台任务/调试
【发布时间】:2009-08-25 13:35:11
【问题描述】:

我有一个不重要的任务;如果网站被使用,它应该偶尔运行一次。

所以我尝试了这种方法:https://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));
    }

【问题讨论】:

    标签: c# asp.net debugging asynchronous


    【解决方案1】:

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

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

    【讨论】:

    • 如果我理解:线程包含在 (w3wp) 进程(进程?)中,因此即使任务在另一个线程中启动并且异步,也会在断点处停止(在异步任务内)而调试总是会阻塞进程的所有线程(因此我不能再导航了)?
    • 在调试时,您可以在 VS 中查看菜单项:Debug|Windows|Threads 以查看并在该进程拥有的所有线程之间切换。是的,它们都将被暂停。希望对您有所帮助。
    【解决方案2】:

    使用后台工作者。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多