Я кодирую текстовую веб-браузерную игру в ASP.NET. Но мне нужна информация о LIL бит, поэтому я решил спросить здесь. Когда пользователь вводит какой-либо квест, скажем, что квест занимает 10 минут, чтобы продолжить. Если пользователь выходит из игры, как я могу заставить свой сценарий работать автоматически и завершить квесты и обновить мощность игроков и т. Д.? Я слышал что-то вроде CronJob. Но я не знаю, работает ли он для ASP.NET, поэтому я хочу услышать любую идею, прежде чем я это сделаю. Спасибо за помощь.Как выполнять запланированные задачи в ASP.NET?
0
A
ответ
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.
Но в вашей ситуации использование кеша, вероятно, является самым простым решением.
Благодарим вас за ответ. Если мы будем использовать эту функцию обратного вызова, вызывается ли она, даже если пользователь не находится на нашем веб-сайте? – phoeNix
Исправить. Фактически, у вас не будет доступа к сеансу пользователя, даже если он/она все еще подключен. Вот почему вы должны добавить в кэш объект (второй параметр) с любыми значениями/ключами, необходимыми для выполнения запланированной задачи. – salgiza
@phoeNix - это будет выполнено, даже если пользователь покинул сайт. Обратите внимание, что вы не можете получить доступ к сеансу и что кэш является общим для всех пользователей, поэтому вам нужен пользовательский ключ. –