我刚刚意识到这段代码:
public async Task<List<Review>> GetTitleReviews(int titleID)
{
using (var context = new exampleEntities())
{
return await context.Reviews.Where(x => x.Title_Id == titleID).ToList();
}
}
...将无法工作,因为异步方法无法等待LINQ表达式。我做了一些搜索,但只找到了一些过于复杂的解决方案。
如何将返回LINQ表达式的函数转换为异步版本?
答案 0 :(得分:8)
添加System.Data.Entity
命名空间并利用Async
扩展方法
在这种情况下ToListAsync
应该做的伎俩
using System.Data.Entity;
public async Task<List<Review>> GetTitleReviews(int titleID)
{
using (var context = new exampleEntities())
{
return await context.Reviews.Where(x => x.Title_Id == titleID).ToListAsync();
}
}
答案 1 :(得分:5)
从技术上讲,该方法不会返回lambda。它返回List<Review>
。
你发布的内容无法编译。但这会:
public async Task<List<Review>> GetTitleReviews(int titleID)
{
using (var context = new exampleEntities())
{
return await Task.Run(() => context.Reviews.Where(x => x.Title_Id == titleID).ToList());
}
}
如果这不能回答你的问题,也许你可以更清楚地知道你想要完成什么,以及为什么上面没有这样做。
答案 2 :(得分:0)
我通过创建 Enumerable
扩展解决了这个问题。这对我来说是必需的,因为 Xamarin Forms 没有 Linq ToListAsync
支持。这是我的扩展:
public static class EnumerableExtension
{
public static Task<List<T>> ToListAsync<T>(this IEnumerable<T> enumerable)
{
return Task.Run(enumerable.ToList);
}
}