C# 当生成的数据是静态的时,如何返回异步IEnumerable列表,这是一个有待解决的问题

C# 当生成的数据是静态的时,如何返回异步IEnumerable列表,这是一个有待解决的问题,c#,C#,我需要编写一个返回签名的函数,就像下面的一样 public async Task<IEnumerable<RouteData>> GetAll() { return await _dbContext.RouteData.ToListAsync(); } public异步任务GetAll() { return wait_dbContext.RouteData.toListSync(); } 上述方法之所以有效,是因为EntityFramework为我提供了Rout

我需要编写一个返回签名的函数,就像下面的一样

public async Task<IEnumerable<RouteData>> GetAll()
{
   return await _dbContext.RouteData.ToListAsync();
}
public异步任务GetAll()
{
return wait_dbContext.RouteData.toListSync();
}
上述方法之所以有效,是因为EntityFramework为我提供了RoutedData,我可以调用扩展方法ToListSync

但是,我正在静态创建一个从GetAll()返回的列表,并希望以异步方式返回该列表。我尝试了Task(()=>GetAll())但没有成功。下面是我的方法,它在没有异步的情况下正确返回

public IEnumerable<RouteData> GetAll()
{
    List <RouteData> routeDataList = GetRoutesAll();
    return routeDataList;
}
public IEnumerable GetAll()
{
List routeDataList=GetRoutesAll();
返回路线主义者;
}
我的问题是,我将使用什么代码从中返回:

public async Task<IEnumerable<RouteData>> GetAll()
{
   return await GetRoutesAll();  // THIS DOESN'T WORK
}

   
public异步任务GetAll()
{
return wait wait GetRoutesAll();//这不起作用
}
公共异步任务GetAll()
{
返回等待任务。运行(()=>GetRoutesAll());
}
这可能会对您有所帮助。

public async Task GetAll()
public async Task<IEnumerable<RouteData>> GetAll()
{
   return await Task.FromResult<IEnumerable<RouteData>>(GetRoutesAll());
}
{ 返回wait Task.FromResult(GetRoutesAll()); }
您有两个选择。只需返回值,无需等待

public异步任务GetAll()
{
返回GetRoutesAll();
}
这是可行的,但效率很低。因此,这将给您一个编译器警告

或者从方法中删除
async
,并返回已完成的
任务

public任务GetAll()
{
返回Task.FromResult(GetRoutesAll());
}

async
实际上不是方法签名的一部分。它是一个使编译器将您的方法转换为其他方法的关键字(请参阅)。

如果
GetRoutesAll()
是一个同步方法,为什么希望
GetAll()
的签名是异步的?没有什么可等待的。您可以使用
return wait task.Run(()=>GetRoutesAll())启动任务
但这是否是正确的方法取决于
GetRoutesAll()
的实现,您没有将其包括在问题中。非常不清楚您想要实现什么-“我想以异步方式返回”-您想要“围绕同步方法创建异步包装器”(通常是个坏主意,但谁会阻止您),“保持
GetRoutesAll
同步,但使
async Task GetAll()
编译时不出现错误/警告”,“拥有
GetAll
方法,以后可以等待”,完全不同的东西?(显示
GetRoutesAll
的签名和
GetAll
的预期用法可能会有所帮助…)@AlexeiLevenkov我有理由想要一个同步方法周围的异步包装器,我理解为什么异步更好。我确实想要一个像第一个代码片段中那样返回的任务。我不想了解关于routeDataList的更多内容。当返回是List时,还有什么其他选项?我标记为正确的答案就是我所看到的ng。谢谢你的帮助。@41686d6564我没有公布我的原因,因为这会分散我的注意力,但自从你问起,我有一个缓存模式,我使用它99%的时间受益于等待。偶尔,我有一个这样的列表,它更容易作为返回任务编码,而不是编写一堆额外的代码n我的缓存方法来处理同步调用。有意义吗?(顺便说一句,我检查的答案确实解决了我的问题,但感谢您花时间提供帮助)。
public async Task<IEnumerable<RouteData>> GetAll()
{
   return await Task.FromResult<IEnumerable<RouteData>>(GetRoutesAll());
}