这里我将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的定义
答案 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;
}