C# 等待异步将导致不同于启动异步的控制器方法

C# 等待异步将导致不同于启动异步的控制器方法,c#,asp.net-mvc,model-view-controller,asynchronous,C#,Asp.net Mvc,Model View Controller,Asynchronous,如何在控制器方法中等待异步结果?实现起来似乎微不足道,但到目前为止,我还没有找到一个干净优雅的好例子 问题就在这里。我有两种控制器方法。方法A和方法B。方法A通过TaskFactory启动长时间运行的流程,并在流程完成时使用ContinueWith更新缓存的值。在A和B之间有一些中间步骤。现在当我进入方法B时,我需要检查缓存中的值。如果缓存中的值尚未更新,我需要等待x秒,并定期检查该值是否已更新 我更愿意在控制器中处理所有这些,这样客户机就不必轮询结果(也不必重写控制器来处理轮询)。但是,我还没

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

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


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

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

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

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

鉴于这种情况,轮询似乎是我能做的最好的事情。SignalR似乎是一个很好的选择,我只是不确定我是否想在应用程序中的单个位置使用推送类型通知。您不需要等待MVC4。自MVC 3以来就存在异步控制器。但是他们对OP想要实现的目标没有帮助。