2015-11-07 84 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()'重新運行'任務 [ ]>'而不是'任務'。 –