私はこのようなTask.WhenAll()
を使用することができますので、私はTask[]
配列を設定しています:タスク<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]] ' ' 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 オブジェクト[]はIQueryableタイプの受信者が必要です)
これらの2つのRetrieveサービスをそれぞれ10秒間実行しようとしています。だから私たちの呼び出しは20秒です。 私は今13〜15秒でブレークポイントに達しています。 私はこれを働かせることができれば、私は5から7秒を削った。
しかし、私はどのように結果を使用するのか分かりません。
どうすればこの方法を完了できますか?
Task.Resultを使用する必要があります。タスクを(タスクとは対照的に)普通の 'Task'として扱っている場合は、' .Result.' –
'awaitにアクセスするためには、まずキャストする必要があります。Task.WhenAll() ;これは何もするつもりはない.... –
Glorin - もう少し詳細を教えてもらえますか? – Sam