【发布时间】:2014-08-07 05:43:15
【问题描述】:
如何将Task<IEnumerable<IMapLocationItem>> 转换为IEnumerable<IMapLocationItem>?
这是我得到Task<IEnumerable<IMapLocationItem>>的代码:
public async Task<IEnumerable<IMapLocationItem>> GetAllMapLocationItemsFromUserName(string userName)
{
IEnumerable<IMapLocationItem> mapLocationImageGalleries = await db.mapLocationImageGalleries.Where(m => m.userName.Equals(userName)).ToListAsync();
IEnumerable<IMapLocationItem> mapLocationVideoGalleries = await db.mapLocationVideoGalleries.Where(m => m.userName.Equals(userName)).ToListAsync();
IEnumerable<IMapLocationItem> mapLocationItemsCombined = mapLocationImageGalleries.Concat(mapLocationVideoGalleries);
return mapLocationItemsCombined;
}
我可以使用关键字.Result,但我在某处读到这会阻止async 任务异步,并且在使用Result 关键字时此方法需要很长时间才能完成。
将Task<IEnumerable<IMapLocationItem>> 转换为IEnumerable<IMapLocationItem> 的最佳方式是什么?
提前致谢
【问题讨论】:
-
为什么不能在调用
GetAllMapLocationItemsFromUserName的函数中使用await关键字? -
它会中断异步,因为调用者不等待函数完成。要强制执行此操作,您可以使用 await。
标签: c# asynchronous casting ienumerable