[英]Async Actions in ASP.NET MVC 4
我有一个同步调用,我需要使用异步/等待关键字将其转换为异步消息,但是只有在任务完成后,此操作才会返回,我需要做的就是将结果逐个返回到UI。
场景是,一旦用户通过身份验证,我就会看到一个任务列表,但是一旦从数据库中检索到该任务,我希望一次加载一个任务,这是我的actionResult,它将搜索条件汇总为-过滤任务:
public async Task<ActionResult> Index(string searchTerm = null, int page = 1)
{
Shared.InitialiseCriteria(SearchCriteria);
SearchCriteria.DepartmentID = DepartmentID;
SearchCriteria.PageSize = 15;
SearchCriteria.FreeText = searchTerm;
var model = await DoStuff(SearchCriteria);
if (Request.IsAjaxRequest())
{
return PartialView("_ConversationList", model);
}
return View(model);
}
这是一个等待任务,它称为GetConversation,它本质上是在找到第一个任务时获取任务,我需要将其加载到Index视图中:
private async Task<Result> DoStuff(CSearchCriteria SearchCriteria)
{
return GetConversations(SearchCriteria);
}
ASP.NET MVC中的异步控制器的唯一目的是在进行异步操作时释放IIS线程来管理其他一些请求。 从呼叫者的角度来看,这与您使用同步控制器相同。
因此,我认为您无法使用异步控制器来实现所需的功能(可以使用它,但不能解决您的问题)。
我认为您可以在服务器端实现某种分页,以检索部分数据并通过SignalR将其发送给客户端。
这里有几个问题:
如AlexK的答案所述, async
api不会更改服务器对客户端的响应方式。 异步仅允许您的应用在不使用线程时释放它们,并使其更容易并行化依赖于多个资源的部分请求。
除了使用为此目的而设计的SignalR之外,您还可以自己使用内置的较低级机制-PushStreamContent 。 以下是一些有关如何执行此操作的博客文章:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.