我有一个同步调用,我需要转换为异步,我使用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);
}
答案 0 :(得分:0)
这里有几个问题:
正如AlexK的回答所解释的那样,async
api不会改变服务器响应客户端的方式。 Async仅允许您的应用在不使用时释放线程,并且可以更轻松地并行化依赖于多个资源的部分请求。
除了使用专为此设计的SignalR之外,您还可以使用内置的低级机制 - PushStreamContent - 自己。以下是一些关于如何做到这一点的博客文章: