我的Web应用程序中有一项功能,可以启动服务器上长期运行的报告。当前,我的客户端上有一个ajax方法,该方法一直运行,以检查当前运行的报告是否完整。它通过重复调用查询数据库的方法来确定给定报告的状态是否已从Running
更改为Error
或Complete
来实现。报告完成后,我将执行ajax加载以获取数据。
我正在考虑实现SignalR,以向其他页面添加一些其他功能,并且我认为这是使事情顺利进行的好测试案例。我主要关心的是如何在报告完成时提醒客户。使用SignalR,我可以简单地说:
public class ReportHub : Hub
{
public async Task ReportComplete(string userId, ReportRunStatus guid)
{
await Clients.User(userId).SendAsync("ReportComplete", guid);
}
}
但是,我想避免在服务器上放置长时间运行的循环,因为随着操作规模的扩大,这可能会降低性能。除了简单地轮询直到完成,还有更好的方法来检查报告状态并向客户端发出警报吗?还是有一些简单的方法可以不断查看表格并提醒已完成的报告?