使用async返回一个项,而不是多个项



我使用的是ASP.NET 6 Core MVC web应用程序。

我一直在从Webforms迁移到MVC,所以在某些方面有点生疏。

我正在努力理解asyncawait的用法(通过了一些教程,虽然它有一些道理,但我需要对它进行一些修改(。

我写了一些非异步的代码,并决定尝试对其进行更改。

public async Task<IActionResult> Index()
{
var results = await collection.FindAsync(_ => true);
foreach (var item in results.ToList())
{
await Response.WriteAsJsonAsync(item);
}
return View();
}

因此,在不使用async和wait的情况下,我会得到一个项目列表,但在使用上面的代码时,浏览器中只显示第一个元素。

有可能以这种方式使用async吗?还是我错过了让它以这种方式工作的东西?

编辑(在没有异步的情况下显示列表中所有项目的代码(

public IActionResult Index()
{
var results = collection.Find(_ => true);
foreach (var item in results.ToList())
{
Response.WriteAsync(item);
}
return View();
}

由于您已经在使用异步方法来附加到当前代码中的响应而不等待它(顺便说一句,这是个坏主意(,异步索引((-方法应该看起来像这样:

public async Task<IActionResult> Index()
{
var results = await collection.FindAsync(_ => true);
foreach (var item in results.ToList())
{
await Response.WriteAsync(item);
}
return View();
}

使用WriteAsJsonAsync将您放入其中的任何对象序列化为json,并设置整个响应Body——它不追加。

因此,这里的问题不在于切换到异步,而在于使用的方法。

最新更新