1

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

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

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

4

2 回答 2

2

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

  • 在客户端上轮询 - 让客户端定期使用 AJAX 请求锤击您的服务器
  • 使用推送并让服务器在某些任务完成时通知客户端 - 结帐SignalR
于 2012-08-01T16:31:09.747 回答
0

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

于 2012-08-01T17:24:26.997 回答