【发布时间】:2014-08-26 13:28:04
【问题描述】:
所以我有这个小代码块,可以并行执行多个任务。
// no wrapping in Task, it is async
var activityList = await dataService.GetActivitiesAsync();
// Select a good enough tuple
var results = (from activity in activityList
select new {
Activity = activity,
AthleteTask = dataService.GetAthleteAsync(activity.AthleteID)
}).ToList(); // begin enumeration
// Wait for them to finish, ie relinquish control of the thread
await Task.WhenAll(results.Select(t => t.AthleteTask));
// Set the athletes
foreach(var pair in results)
{
pair.Activity.Athlete = pair.AthleteTask.Result;
}
所以我正在下载每个给定活动的运动员数据。但可能是我们多次要求同一个运动员。 我们如何确保 GetAthleteAsync 方法仅在线获取尚未在内存缓存中的实际数据?
目前我尝试在 GetAthleteAsync 方法中使用 ConcurrentDictionary<int, Athelete>
private async Task<Athlete> GetAthleteAsync(int athleteID)
{
if(cacheAthletes.Contains(athleteID))
return cacheAthletes[atheleID];
** else fetch from web
}
【问题讨论】:
-
能否贴出从缓存中读取的代码?
-
添加了一些额外的上下文
-
嘿,好问题!但我不确定你是如何在 wp8 中获得
ConcurrentDictionary的?
标签: c# windows-phone-8 winrt-async