ASP.NET MVC中的后台操作

时间:2016-03-24 17:56:22

标签: c# asp.net-mvc asynchronous async-await

在我的ASP.NET MVC 5应用程序中,我使用Redis作为LRU缓存来缓存长时间运行的数据库查询的结果。每当用户请求这样的结果时,应用程序首先检查它是否已经被缓存...如果在缓存中找到它,应用程序将返回缓存的结果。如果没有,应用程序将执行查询,然后缓存结果。

在少数情况下,应用程序需要编写相当多的缓存条目(> 10000)。有没有办法立即响应用户的请求并在后台写入缓存?

我正在考虑在火灾中编写缓存并忘记使方法编写缓存 async void 。我不关心该方法的任何结果,如果它失败或“无关紧要”,或者在下一个请求到达应用程序之前完成它是否“无关紧要......”(应用程序确实不< / strong>以任何方式依赖于存在的缓存条目。)

在ASP.NET MVC中使用 async void 是一个好主意还是会导致问题?如果没有,那么在不让用户等待的情况下编写缓存的正确解决方案是什么?

2 个答案:

答案 0 :(得分:3)

看看Hangfire

“Hang fire:在ASP.NET应用程序中执行”即发即弃“,”延迟“和”重复“任务的简单方法。无需Windows服务。”

答案 1 :(得分:1)

您可以返回void并使用QueueBackgroundWorkItem填充缓存。

QueueBackgroundWorkItem提供了一种运行短期后台任务的安全方法。