2015-11-07 80 views
1

内使用我有这样的功能:该 '等待' 操作符只能异步lambda表达式错误

public async Task<IEnumerable<RegionBreif>> GetAsync() 
    { 

    return await Table.Where(x => x.SiteId == _siteId).Select(r => new RegionBreif 
    { 
     IsServiceable = await RegionBreif.checkIfServicable(Context, r.SiteId, r.Id) 
    }).ToArrayAsync(); 
} 

而这个功能:

public static async Task<bool?> checkIfServicable(DbContext context, int? _siteId, int _regionId) 
{ 
    var t = (from ir in context.Set<InspectionReview>() 
      join so in context.Set<SiteObject>() on ir.ObjectId equals so.Id 
      where so.SiteRegionId == _regionId && so.SiteId == _siteId 
      select (bool?) 
      ir.IsNormal); 

    return t.Count() == 0 ? (bool?)null : t.Any(x => x.Value == false) ? false : true; 
} 

在此行:

await RegionBreif.checkIfServicable(Context, r.SiteId, r.Id) 

我收到此错误:

错误13'await'操作符只能在异步lambda表达式中使用。考虑用'async'修饰符标记这个lambda表达式。

回答

3

问题出在您传递给Select的lambda表达式中。如果你想利用类型内await的创建,RegionBreif,你必须通过下面的async lambda表达式:

Select(async r => new RegionBreif 
{ 
    IsServiceable = await RegionBreif.checkIfServicable(Context, r.SiteId, r.Id) 
}) 
+0

注意,现在这样会使'ToArrayAsync()'重新运行'任务 [ ]>'而不是'任务'。 –