2013-11-20 3 views
0

В настоящее время я работаю над проектом в ASP.NET MVC 4 и пришел по модулю, где требуется индикатор выполнения. Вопрос, который у меня сейчас возникает, - «Каков наилучший способ реализации индикатора async?».Какова наилучшая практика при обновлении индикатора выполнения?

После некоторого поиска я наткнулся на следующий метод:

  1. Создайте startEvent() и getProgress() в C# код.
  2. Использовать javascript setTimeout() для вызова метода getProgress() асинхронно.

(Пример: https://www.devexpress.com/Support/Center/Example/Details/E4244)

Мое замечание этого метода является то, что это приводит к тому, код будет зависеть от тайм-аута вы выбираете. Поэтому для поиска наилучшего и наиболее эффективного тайм-аута потребуется некоторое время.


Теперь метод, который я бы, скорее всего, использовали, прежде чем я исследовал этот вопрос заключается в следующем:

  1. В коде позади, создать метод handleItem (INT индекс), который принимает индекс и делает все вы хотите сделать с элементом в этом индексе.
  2. Определите количество элементов, которые хотите обработать, и передайте их на ваш javascript.
  3. В javascript инициируйте цикл for, который перебирает от 0 до суммы - 1, и для каждого индекса он инициирует ajax-вызов handleItem (i).
  4. В этом полном выполнении инструкции ajax-call вы можете обновить индикатор выполнения с новой суммой.

Моих вопросов здесь следующие:

  1. ли это подвергает слишком много логики программы?
  2. Означает ли это, что слишком много накладных расходов, поскольку каждый вызов идет на сервер и обратно?
  3. Есть ли другие причины, по которым я должен воздерживаться от использования этого метода?

Заранее спасибо
Koen Morren

ответ

0

Это не рекомендуется стратегия, поскольку клиент управляет процессом. Если произойдет прекращение подключения или, возможно, пользователь закроет браузер, процесс остановится.

Как правило, если вы используете прямой HTTP, вам нужно будет опросить (aka pull) из javascript. Псевдокод довольно много это:

Call Creates Task ID and sends it to client 
Client queries the status of task with given ID 

Другая возможность есть WebSockets, которые позволяют вашему клиенту прослушивать изменения, которые выталкиваются сервером.

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

Таким образом, у опроса больше лаг, чем механизмы push. Клиенты не должны запускать асинхронный процесс, но они должны быть либо уведомлены, либо предоставлены некоторые механизмы состояния асинхронного процесса.

0

В отличие от ASP.NET, существует несколько способов переноса данных с сервера на клиент в MVC, WebSockets или SingnalR, так как api (ы) могут работать на вас.

Подход ajax хорош и дает вам надежный механизм для обновления данных, независимо от того, перейдет ли пользователь на другую страницу или закрывает браузер, каждый раз, когда запускается ajax, он обновляет интерфейс. Таким образом, нет ничего плохого, просто есть справедливый интервал в javascript.

  1. Означает ли это чрезмерное количество программной логики?

    Код будет написан только в файле класса, чтобы рассчитать текущий% age.

2. Это создает слишком много накладных расходов, поскольку каждый вызов переходит на сервер и обратно?

Нет, Аякса являются легкий вес вызывает

3.Are там какие-либо другие причины, почему я должен воздержаться от использования этого метода?

Этот метод позволит пользователю свободно перемещаться по другим ресурсам, поскольку ajax будет работать независимо.

Смежные вопросы