等待异步会导致与启动异步的控制器方法不同的控制器方法

本文关键字:控制器 异步 方法 等待 启动 | 更新日期: 2024-09-19 13:13:53

如何在控制器方法中等待异步结果?实现起来似乎很琐碎,但到目前为止,我还没有找到一个干净优雅的好例子。

问题来了。我有两种控制器方法。方法A和方法B。方法A通过TaskFactory启动一个长时间运行的进程,并在进程结束时使用ContinueWith更新缓存值。在A和B之间有一些中间步骤。现在,当我进入方法B时,我需要检查缓存中的值。如果缓存中的值尚未更新,我需要等待x秒,并定期检查该值是否已更新。

我更喜欢在控制器中处理所有这些,这样客户端就不必轮询结果(也不必重写控制器来处理轮询)。但我还没能找到一种方法来实现控制器方法中的轮询,这种方法在超时之前不会阻塞(我担心线程池不足)。也许没有一个干净的实现我可以在这里使用。如果轮询是正确的或唯一的答案,我只需要接受它

HTTP是一个无状态协议。如果不进行阻塞,就无法在服务器上实现这样的轮询。你有两种可能性:

  • 在客户端上轮询-让客户端定期用AJAX请求敲打服务器
  • 使用推送并让服务器在某些任务完成时通知客户端-checkout SignalR

等待异步会导致与启动异步的控制器方法不同的控制器方法

您可以等待mvc 4获得异步控制器,或者获得mvc 4和.net 4.5的测试版。