大约一分半钟后
有你的问题。这是一个网络应用程序?对于 Web 应用程序响应请求来说,一分半钟是很长的时间。足够长的时间,它不值得参与各种诡计来使它成为一种工作。
您将希望卸载此过程,使其与 Web 应用程序本身更加异步。Web 应用程序的本质是它们应该接收请求并及时响应。您在这里拥有的是一个长期运行的过程,无法及时响应。Web 应用程序可以促进与数据的交互,但不应直接在请求/响应中直接处理其处理。
Web 应用程序如何与流程交互?它只是启动它,还是为启动过程提供信息?我建议该过程本身由 Windows 服务或控制台应用程序之类的东西处理。与 Web 应用程序分离得越多越好。现在,由于我对过程本身一无所知,我正在对其行为做出一些假设......
Web 应用程序可以接收启动流程的请求以及流程所需的任何信息。它可以将其与状态值(待处理、排队等)一起存储在数据库中,然后(及时)响应用户已收到请求并且进程已排队。Web 应用程序可以有一个检查状态的页面,以便用户可以看到进程是如何进行的(如果它已启动,它经过了多少条记录等)。
离线应用程序(Windows 服务等)只会监视该数据库以查找要处理的新排队数据。当它看到它时,它会更新状态(运行、处理等)并通过更新该数据在此过程中提供任何相关反馈(处理的记录数等)。因此,离线应用程序和 Web 应用程序都在与相同的数据进行交互,但不会以阻塞 Web 应用程序的线程并阻止对用户的响应的方式进行交互。
当该过程完成时,再次更新状态。Web 应用程序可以显示它已完成并提供下载结果的链接。离线过程甚至可以在完成后向用户发送电子邮件,或者 Web 应用程序可以具有某种通知系统(我正在描绘 Facebook 中的小通知图标),它会提醒用户注意新活动。
这样线程就不会被阻塞,用户可以继续与应用程序交互(如果有任何可以交互的东西)等等。而且你还可以获得其他额外的好处。例如,过程的结果因此保存在数据库中并自动进行历史跟踪。