C# ASP.NET MVC 4中的异步操作
我有一个同步调用,我需要将其转换为async,我使用async/await关键字,但这只会在任务完成后返回,我需要做的是将结果逐个返回到UI 场景是,一旦用户通过身份验证,我会向用户显示一个任务列表,但是我希望在从数据库检索到任务后,一次加载一个任务,下面是我的actionResult,它将搜索条件放在一起,以预过滤任务:C# ASP.NET MVC 4中的异步操作,c#,asp.net-mvc-4,asynchronous,async-await,C#,Asp.net Mvc 4,Asynchronous,Async Await,我有一个同步调用,我需要将其转换为async,我使用async/await关键字,但这只会在任务完成后返回,我需要做的是将结果逐个返回到UI 场景是,一旦用户通过身份验证,我会向用户显示一个任务列表,但是我希望在从数据库检索到任务后,一次加载一个任务,下面是我的actionResult,它将搜索条件放在一起,以预过滤任务: public async Task<ActionResult> Index(string searchTerm = null, int page = 1) {
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);
}
公共异步任务索引(字符串searchTerm=null,int page=1)
{
Shared.InitialiseCriteria(搜索标准);
SearchCriteria.DepartmentID=部门ID;
SearchCriteria.PageSize=15;
SearchCriteria.FreeText=searchTerm;
var模型=等待DoStuff(搜索标准);
if(Request.IsAjaxRequest())
{
返回PartialView(“会话列表”,模型);
}
返回视图(模型);
}
这是wait任务,它调用GetConversation,当找到第一个任务时,它基本上会得到任务。我需要将它加载到索引视图中:
private async Task<Result> DoStuff(CSearchCriteria SearchCriteria)
{
return GetConversations(SearchCriteria);
}
private async Task DoStuff(CSearchCriteria搜索条件)
{
返回GetConversations(搜索条件);
}
ASP.NET MVC中async controller的唯一用途是在异步操作进行时释放IIS线程来管理其他一些请求。从调用方的角度来看,这与使用同步控制器是一样的
所以,我不认为使用异步控制器可以实现您想要的(您可以使用它,但它不会解决您的问题)
我认为您可以在服务器端实现某种分页,以检索部分数据并通过发送给客户端。这里有几个问题:
- 如何使ASP.NET在每个项目可用时立即开始返回数据
- 如何协调客户机和服务器,以便客户机知道有一个新项目可用(即,它可以单独解析响应中的每个项目,或者如果您正在寻找“拉动”,它可以请求更多数据)
async
api不会改变服务器响应客户机的方式。Async只允许应用程序在线程未使用时释放线程,并使依赖于多个资源的请求部分更容易并行化
除了使用专门为此设计的信号器之外,您还可以使用内置的低级机制——您自己。以下是一些关于如何做到这一点的博客帖子:
- 包括一些演示代码-向下滚动至“推送内容”
- ,包括客户端(在浏览器中)的示例。亦与以下事项有关—