AFAIK 没有在 MVC 项目中声明/编程任务的标准方法。完成您想要的工作的推荐方法是在您的解决方案中创建一个新的控制台应用程序项目,并使用 Windows 任务计划程序每 X 分钟执行一次,在任何购物车中发布超过 X 分钟的任何产品。
为此,您需要从新项目中引用您的 MVC 项目(以访问所有模型),或者更好的是,创建一个类库项目,将您的模型/数据库类移到那里,然后从MVC 和控制台项目。
话虽如此,实际上有一个小的“hack”可用于在 MVC 项目中获取编程任务。您可以使用以下代码:
HttpContext.Current.Cache.Add("Task", "1", null,
DateTime.MaxValue, TimeSpan.FromMinutes(5),
CacheItemPriority.Normal, new CacheItemRemovedCallback(CheckCarts));
例如,可以从 Global.asax 调用的那行代码会将“任务”条目添加到缓存中。存储的值(“1”)并不重要,重要的是缓存条目在五分钟后过期,并且在过期时调用“CheckCarts”方法(在 Global.asax 中定义,或者在您执行的类中定义此代码)。
public void CheckCarts(string key, object value, CacheItemRemovedReason reason) {
// Insert your code here to check for expired carts
(...)
// We add the entry again to the cache, so that this method will be called again in 5 minutes.
HttpContext.Current.Cache.Add("Task", "1", null,
DateTime.MaxValue, TimeSpan.FromMinutes(5),
CacheItemPriority.Normal, new CacheItemRemovedCallback(CheckCarts));
}
当缓存过期时,会调用 CheckCarts 方法,您的代码会执行它必须做的任何事情,最后会再次将自己添加到缓存中,并在另外 5 分钟内调用。