2014-11-12 2 views
0

Я кодирую текстовую веб-браузерную игру в ASP.NET. Но мне нужна информация о LIL бит, поэтому я решил спросить здесь. Когда пользователь вводит какой-либо квест, скажем, что квест занимает 10 минут, чтобы продолжить. Если пользователь выходит из игры, как я могу заставить свой сценарий работать автоматически и завершить квесты и обновить мощность игроков и т. Д.? Я слышал что-то вроде CronJob. Но я не знаю, работает ли он для ASP.NET, поэтому я хочу услышать любую идею, прежде чем я это сделаю. Спасибо за помощь.Как выполнять запланированные задачи в ASP.NET?

ответ

2

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

public void SomeMethod() { 
    var onRemove = new CacheItemRemovedCallback(this.RemovedCallback); 
    Cache.Add("UserId_QuestId", "AnyValueYouMightNeed", null, DateTime.Now.AddMinutes(10), Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove); 
} 

public void RemovedCallback(String key, Object value, CacheItemRemovedReason r){ 
    // Your code here 
} 

Элемент кэша имеет истечение 10 минут, и, как только он удаляется из памяти RemovedCallback будет вызван.


Примечание: только полностью ответить на ваш вопрос:

  • Вы также могли бы использовать некоторые из механизмов, доступных для планирования задач в ASP.Net (например, Quartz.net).
  • Создайте проект консоли в своем решении и назначьте его на веб-сервере (используя планировщик Windows).
  • Создайте проект Web Job, если вы развертываете свою сеть в Azure.

Но в вашей ситуации использование кеша, вероятно, является самым простым решением.

+0

Благодарим вас за ответ. Если мы будем использовать эту функцию обратного вызова, вызывается ли она, даже если пользователь не находится на нашем веб-сайте? – phoeNix

+0

Исправить. Фактически, у вас не будет доступа к сеансу пользователя, даже если он/она все еще подключен. Вот почему вы должны добавить в кэш объект (второй параметр) с любыми значениями/ключами, необходимыми для выполнения запланированной задачи. – salgiza

+0

@phoeNix - это будет выполнено, даже если пользователь покинул сайт. Обратите внимание, что вы не можете получить доступ к сеансу и что кэш является общим для всех пользователей, поэтому вам нужен пользовательский ключ. –