c# 中 linq 查询 return 的异步任务方法问​​题

Async task method issue on a linq query return in c#

我需要有关异步任务的帮助我正在尝试 return 来自数据库的值列表,我有一个 table 存储库,然后使用该存储库的一个存储库 class,我遇到的问题是在我的方法中使用我的异步任务 return 值列表。

这是我的代码,我的问题是如何正确使用异步任务,然后在 return 中等待方法中的 linq 查询,因为我收到错误 GetMaterialLookupCodeQuery()

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BarcodeReceivingApp.Core.Repositories;
using System.Data.Entity;

namespace BarcodeReceivingApp.Persistence.Repositories
{
    public class MaterialRepository : Repository<Material>, IMaterialRepository
    {
        public MaterialRepository(BarcodeReceivingDbContext context)
            : base(context)
        {

        }
        public async Task<IEnumerable<string>> GetMaterialLookupCodeQuery()
        {
            return await BarcodeReceivingDbContext.Materials.Include(m => m.MaterialLookupCode).Select(m => m.MaterialLookupCode);
        }

        public BarcodeReceivingDbContext BarcodeReceivingDbContext
        {
            get { return Context as BarcodeReceivingDbContext; }
        }
    }
}

这是class

的界面
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BarcodeReceivingApp.Core.Repositories
{
    public interface IMaterialRepository : IRepository<Material>
    {
        Task<IEnumerable<string>> GetMaterialLookupCodeQuery();
    }
}

Linq 使用关键字 yield return,这表示在调用它之前我们不会实际执行操作。因此,您的避免代码试图等待延迟调用方法的操作。

根据这个MSDN

Although it's less code, take care when mixing LINQ with asynchronous code. Because LINQ uses deferred (lazy) execution, async calls won't happen immediately as they do in a foreach() loop unless you force the generated sequence to iterate with a call to .ToList() or .ToArray().

那么,别等了。在使用结果之前,您实际上并没有执行该语句