首页 > 解决方案 > ASP.NET Core 异步任务> 不能在“foreach”中使用

问题描述

我一直试图在 asp.net core 3.0 中了解异步,但我仍然缺少一些东西。

我有一些异步数据库查询:

public async Task<IList<MyObject>> GetAll(MyContext context)    
{        
    var a = MyMethodA(context);    
    var b = MyMethodA(context);    
    return (await Task.WhenAll(a, b)).SelectMany(e => e).ToList();
}

索引.cs:

public Task<IList<MyObject>> MyDBList  { get; set; }

public void OnGet()
{
    MyDBList = _myInterface.GetAll(context);
}

索引.cshml

foreach (var x in Model.MyDBList) {
    <p>x.ID</p>
}

在 index.cshtml 上,我收到错误 System.Threading.Tasks.Task> cannot be used in 'foreach' 语句,因为它既没有实现 'IEnumerable' 或 'IEnumerable',也没有合适的 'GetEnumerator'

标签: asp.net-core-3.1

解决方案


看起来您需要在调用异步函数时使用 await - 如下所示:

public void OnGet() 
    MyDBList = await _myInterface.GetAll(context);
}

推荐阅读