【发布时间】:2014-08-26 07:11:00
【问题描述】:
- 注意:这是针对 winrt 通用应用程序 *
我正在通过使用异步方法从服务中获取数据:
var activityList = await Task.Run(() => dataService.GetActivitiesAsync());
但对于每项活动,我仍然需要加载运动员数据。 所以现在我只是循环活动并像这样加载运动员数据(运动员没有批量加载选项):
foreach(var activity in activityList)
{
activity.Athlete = dataService.GetAthleteAsync(activity.AthleteID);
}
但是这个 GetAthleteAsync 也会返回一个任务,所以我只是想知道有没有更好的方法在后台线程中完成这个任务?不知何故与 Task.WhenAll 或其他什么? Activity 对象上的 Athlete 属性具有 NotifyPropertyChanged,因此 UI 将在设置时显示所需的数据。 GetAthleteAsync 方法已经尝试根据给定的 id 缓存运动员。
关于如何使其表现更好的任何建议?
一些细节,所有方法都连接到 Web API。 大多数情况下,我们将针对 10 位独特的运动员(但取决于用户,这可能会增加)。
【问题讨论】:
-
GetAthlete方法是否繁重到使其异步?事实上,在这个问题的背后,还有一个问题,你从哪里获取数据?数据库?一个网站?内存?如果是数据库,将GetAthlete的查询组合成一个查询,效率会高很多,如果是从内存中,则不需要使GetAthlete异步,如果是来自网站,则使用@ 987654327@ 可能会有所帮助。 -
我会在问题中添加更多细节...
-
Parallel.Foreach() 怎么样?活动将被拆分为多个子集合,并且它们的迭代将被计划到 ThreadPool。并且可以同步获取每一个运动员的数据。
-
我不认为 Parallel.ForEach 可用于 winrt 通用。但我可能是错的。
-
@Depechie
Platforms - Windows Phone 8.1, Windows Phone 8, Windows 8.1msdn.microsoft.com/library/dd992001(v=vs.110).aspx
标签: c# windows-phone-8 winrt-async