等待异步结果的控制器方法与启动它的方法不同

时间:2012-08-01 16:29:24

标签: c# asp.net-mvc model-view-controller asynchronous

如何在控制器方法中等待异步结果?看起来它实现起来是微不足道的,但到目前为止,我还没有找到一个干净优雅的好例子。

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

我更愿意在控制器中处理所有这些,因此客户端不必轮询结果(并且必须重写控制器以处理轮询)。但我还没有找到一种方法来实现控制器方法内部的轮询,直到超时到期才阻止(我担心线程池饥饿)。也许我没有在这里使用的干净实现。如果民意调查是正确或唯一的答案,我将不得不接受它。

2 个答案:

答案 0 :(得分:2)

HTTP是无状态协议。您无法在不阻塞的情况下在服务器上实现此类轮询。你有两种可能性:

  • 在客户端进行轮询 - 让客户端定期使用AJAX请求锤击您的服务器
  • 使用推送并让服务器在某项任务完成时通知客户端 - 结帐SignalR

答案 1 :(得分:0)

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