如何编写asyn Task <ienumarable <employee >>返回类型

时间:2019-01-19 17:51:34

标签: c# async-await

这里我将Wrotecode作为异步任务> GetCountries()我提​​到了什么类型的返回类型

Repo.cs

public async Task<IEnumerable<Country>> GetCountries()
        {
            var x=  from n in _ConnectToDb.Country
                    orderby n.CountryId
                    select n;
            return x.ToList();
        }

我在控制器中将此称为

public async Task<ActionResult<Country>> GetCountryRes()
        {
            var x =await ObjRepo.GetCountries();    
            return x;
        }

我收到错误消息,因为Deos不包含作为GetAwaiter的定义

4 个答案:

答案 0 :(得分:2)

            public Task<IEnumerable<Country>> GetCountries()
            {
                var x=  from n in _ConnectToDb.Country
                        orderby n.CountryId
                        select n;
                return Task.FromResult(x.ToList());
            }

这将是您的解决方案。代码中的问题是您应该重新调整Task还是在GetCountries()中运行等待的方法。 Async关键字本身没有任何意义,它不会异步运行方法,它只允许您使用await。所以这对您来说是多余的

答案 1 :(得分:0)

此答案已编辑

您的方法设置为返回单个Country,但是您的代码返回一个IEnumerable<Country>

但是根据.Net版本,该问题似乎得到不同解决。 如果您使用的是.Net Core 2.2(或以后的更高版本),则该方法应该起作用:

public async Task<ActionResult<IEnumerable<Country>>> GetCountryRes()
{
    var x = await ObjRepo.GetCountries();    
    return x;
}

答案 2 :(得分:0)

第一种方法中的async语法糖是不必要的,因为您没有等待任何事情,所以会出现问题。您只需要从结果中返回Task。但是,因为您使用的是LINQ语句(任何LINQ方法都适用),查询直到被调用才被处理(对于任何后续调用也将被重新处理),所以我建议立即对其进行评估:

Task<IEnumerable<Country> GetCountries()
{
  var x = from ...;
  return Task.FromResult(x.ToArray());
}

答案 3 :(得分:0)

对于GetCountries,我有两个版本

public async Task<IEnumerable<Country>> GetCountries()
{
    var x = from n in _ConnectToDb.Country
            orderby n.CountryId
            select n;

    return await Task.FromResult(x.ToList());
}

// I prefer this version 
public Task<IEnumerable<Country>> GetCountries2()
{
    var x = from n in _ConnectToDb.Country
        orderby n.CountryId
        select n;

    return Task.FromResult(x.ToList().AsEnumerable());
}

控制器

// Here I change the return value to IEnumerable
public async Task<ActionResult<IEnumerable<Country>>> GetCountryRes()
{
    var x =await ObjRepo.GetCountries();    
    return x;
}