我们有一个 ASP.NET MVC 3 应用程序,它与 WCF 层交互以实现服务逻辑。在一项特定功能上,服务层需要很长时间才能响应,即svc 上的 UI 超时。处理本身是巨大的,因此必然需要更多时间。我们不希望用户看到超时,因此我们计划显示部分成功状态并不断更新 UI 的状态。
我们计划将这个过程分成不同的步骤,其中一些步骤有点火,忘记了时尚。现在,当用户请求详细信息时
Svc 处理强制步骤,返回响应
Svc 还使用下面(TPL)启动任务触发它,这执行非强制性步骤
Task.Factory.StartNew(FireAway);
UI 不断轮询以更新状态
任务更新数据库中的完成状态
UI 轮询和检索完成状态并在 UI 中显示
担心...
- 处理任务的线程是否会被重用(没有附加监听器),这会导致过多的线程创建或泄漏吗?
- 资源如何,Fire and forget tasks 会导致内存泄漏吗?任务功能是连接到多个数据库并更新状态。
- 我对设计不满意(我们必须这样做作为快速修复),还有更好的设计模式吗?