ASP.NET MVC 4中的异步操作

时间:2013-12-16 15:02:33

标签: c# asp.net-mvc-4 asynchronous async-await

我有一个同步调用,我需要转换为异步,我使用async / await关键字,但这只有在任务完成后才会返回我需要做的是将结果逐个返回给UI。 / p>

方案是我已经对用户进行了身份验证后显示了一个任务列表,但是我希望一旦从数据库中检索到任务就一次加载一个,这里是我的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);

 }

这是await任务,它调用GetConversation,它基本上在找到第一个任务时获取任务我需要将它加载到Index视图:

private async Task<Result> DoStuff(CSearchCriteria SearchCriteria)
{

   return GetConversations(SearchCriteria);
}

1 个答案:

答案 0 :(得分:0)

这里有几个问题:

  • 如何在每个项目可用时立即开始返回数据
  • 如何协调客户端&amp;服务器,以便客户端知道新项目可用(即,它可以单独解析响应中的每个项目,或者如果您正在寻找'拉',它可以请求更多数据)

正如AlexK的回答所解释的那样,async api不会改变服务器响应客户端的方式。 Async仅允许您的应用在不使用时释放线程,并且可以更轻松地并行化依赖于多个资源的部分请求。

除了使用专为此设计的SignalR之外,您还可以使用内置的低级机制 - PushStreamContent - 自己。以下是一些关于如何做到这一点的博客文章: