我设立一个Task[]
阵列,所以我可以用Task.WhenAll()
这样的:如何解开任务<IEnumerable>以处理结果?
Task[] tasks = new Task[2];
tasks[0] = _widgetDataService.RetrieveAsync<CollaboratorNetworkNode>(
"get_collaborator_nodes", portfolio,
recentFys, nodesSwitch);
tasks[1] = _widgetDataService.RetrieveAsync<CollaboratorNetworkEdge>(
"get_collaborator_edges", portfolio, recentFys);
await Task.WhenAll();
的代码运行正常,并在Task.WhenAll
到达一个破发点。
但现在我去跑这个代码:
var nodes = from pi in (IEnumerable<CollaboratorNetworkNode>)tasks[0]
select new GraphNode { Id = pi.ProfileId, Properties = pi, Labels = new[] { "Person" } };
,我得到的错误信息:
无法转换 类型的对象System.Threading.Tasks.Task'1 [System.Collections.Generic.IEnumerable'1 [Nete.Ireport.Models.ViewModels.CollaboratorNetworkNode]]' to type 'System.Collections.Generic.IEnumerable'1 [Nete.Ireport.Models.ViewModels.CollaboratorNetworkNode]'。
如果我尝试只运行这个命令:
var nodes = from pi in tasks[0]
select new GraphNode { Id = pi.ProfileId, Properties = pi, Labels = new[] { "Person" } };
我不能编译,因为我得到的红色波浪有:
任务不包含选择的定义和最佳推广 方法超载“DynamicQueryable.Select(IQueryable,string,params object [] require IQueryable type。
我们只是试图运行这两个检索服务,每个都是10秒。所以我们的电话是20秒。 我现在正在13到15秒内到达转折点。 所以,如果我能得到这个工作,我已经削掉5到7秒。
但我不知道如何使用结果。
我该如何完成这个方法?
您需要使用Task.Result。如果你将自己的任务视为一个普通的“任务”(而不是“任务”),那么你需要首先投入才能访问'.Result.' –
'等待Task.WhenAll() ;'这是不会做任何事情...... –
格洛林 - 你能再详细一点吗? – Sam