上下文: 从我的 javascript Web UI 中,我启动了一个在 .NET2.0 后端进行的长时间运行(几分钟)的操作。当长时间运行的操作并行运行时,调用会立即返回操作 ID。这些操作不是 CPU 密集型的,但会进行缓慢的网络调用。操作完成后,我想在 Web UI 中查看结果。
问题:工作完成后如何通知客户?
我考虑过的选项:
选项 1:我直接从 JS 异步启动长时间运行的操作,我希望返回值是最终结果而不是操作 ID。我的 AJAX 库处理一切,生活看起来非常轻松和整洁。问题是在服务器端线程是一个 ThreadPool 线程,我现在锁定了几分钟。即使有足够的处理能力,您也不需要太多长时间运行的并行请求来导致 ThreadPool 饿死并使整个服务器瘫痪。
选项2:使用操作ID,如果操作完成,我开始轮询服务器。但是,这是对我自己的服务器的拒绝服务攻击。此外,必须有公平的 ajax 解决方案。这不是一个独特的问题。