首页 > 解决方案 > 第一次调用异步等待仍然有错误 IEnumerable不包含 GetAwaiter 的定义

问题描述

我有一个 webapi,控制器在其中调用业务层,然后调用实体框架代码以获取数据。

我能够通过将代码更改为来修复 EF 类中的错误

public async Task<IEnumerable<MyDataType>> GetDataAsync()
{
var myTask = Task.Run(()=> MyDbContext.Table1.OrderBy(p => p.Title).ToList());
return await myTask;
}

从我的控制器,我仍然收到同样的错误

public async Task<ActionResult<IEnumerable<MyDataType>>> Get()
{
  var collection = await handler.GetDataAsync();
return collection;
}

使用 .NET Framework 4.6,我通常将异步等待添加到从 Controller 到业务层方法和 GetDataAsync 调用的所有方法中。

使用 C# 7.0,是不是我们不需要控制器中的异步调用而只需要数据层方法中的异步调用?在我的代码中,控制器调用业务层,然后调用 DbContext 方法。

如何修复控制器中的此错误?

谢谢

标签: c#async-await

解决方案


我猜,现在异步等待调用与 C# 7.0 不同。

在我的数据层中,我使用了 Task.Run 并修复了该类上的编译错误。

在顶部,我对控制器方法上的 Task.Run 做了同样的事情,Task.Run 使用 async 和 await 调用业务方法。

它不同于旧的 .net 框架代码。希望它可以帮助别人。


推荐阅读