Не ждите длительных операций ASP.NET MVC - PullRequest
5 голосов
/ 01 марта 2011

У нас есть длительная операция запуска, когда пользователь что-то делает (генерирует несколько отчетов).Мы не хотим, чтобы пользователь ждал, пока эти отчеты будут сгенерированы.Есть ли быстрый способ сделать это, не используя планировщик заданий?Может быть, используя такие темы?Или это небезопасно?

    public ActionResult About()
    {
        Thread thread = new Thread(new ThreadStart(MuchWork));
        thread.Start();
        return View();
    }

    public void MuchWork()
    {
        Thread.Sleep(10000);

        Thread.Sleep(4000);
    }

Ответы [ 3 ]

2 голосов
/ 19 октября 2011

См. Пост Опасности реализации повторяющихся фоновых задач в ASP.NET . Фил Хаак, где он описывает, как взломать планировщик псевдо-заданий при использовании интерфейса IRegisteredObject для ограничения Проблемы с завершением IIS / AppPool.

0 голосов
/ 01 марта 2011

может использовать пул потоков или TPL, чтобы вы могли проверить состояние и не подвергаться злоупотреблениям в потоке?под «проверкой» я имею в виду, посмотрите, сколько из этих запросов вы уже выполняете, прежде чем закрутить еще один.

Я утверждаю, что результат операции записан в некоторой таблице БД, поэтому пользователь может опрашивать и видетьстатус?

0 голосов
/ 01 марта 2011

Это не безопасно.А как насчет сбоя вашего сервера во время операции?И пользователь, не зная, что операция никогда не выполнялась.

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

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