Фоновые задачи в ASP.NET / Debug - PullRequest
       9

Фоновые задачи в ASP.NET / Debug

1 голос
/ 25 августа 2009

У меня есть задача, которая не важна; он должен запускаться время от времени, если используется веб-сайт.

Итак, я попробовал этот подход: http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

Задача может быть длинной, поэтому я хочу, чтобы она была асинхронной ... чтобы фоновая задача не остановила навигацию.

Чего я не понимаю, так это того, что когда я начинаю отладку (присоединяюсь к процессу w3wp.exe), я больше не могу перемещаться по сайту, пока не перестану отлаживать?

Вот код (ResourceService является службой 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 ]

2 голосов
/ 26 августа 2009

Я не понимаю, что когда я начинаю отладку (прикрепить к процесс w3wp.exe) не могу перейти сайт больше, пока я не остановлюсь отладки?

Просто предположение, но у вас установлена ​​точка останова? Как только вы достигнете точки останова, выполнение в процессах w3wp остановится в этой точке, поэтому вы не сможете «перемещаться» по сайту.

1 голос
/ 26 августа 2009

Использование фонового рабочего.

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

Затем в обработчике DoWork вызовите нужный вам метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...