"サードパーティ" libのメソッドから別の値を返す方法?
-
12-12-2019 - |
質問
Task<string>[] tableOfWebClientTasks = new Task<string>[taskCount];
for (int i = 0; i < taskCount; i++)
{
tableOfWebClientTasks[i] = new WebClient().DownloadStringTask(allUrls[count - i - 1]);
}
Task.Factory.ContinueWhenAll(tableOfWebClientTasks, tasks =>
{
Parallel.ForEach(tasks, task =>
{
//Here I have result from each task.
//But information which url is executed on this task, is lost.
});
});
.
私は、例えば、クラス(2つのパブリックプロパティ、タスクのために1つ、そしてURLの場合は2つずつ)とリターンインスタンスを作成することができます。しかし、この方法は他の方法とつながっています。
この問題の解決策をいくつか持っていますか?
解決
タスクを作成したURLに関連付けることができる場合は、辞書を使用してマッピングを実行できます。
Task<string>[] tableOfWebClientTasks = new Task<string>[taskCount];
var taskIdToUrl = new Dictionary<int,string>();
for (int i = 0; i < taskCount; i++)
{
var url = allUrls[count - i - 1];
var task = new WebClient().DownloadStringTask(url);
tableOfWebClientTasks[i] = task;
taskIdToUrl.Add(task.Id, url);
}
TaskFactory.ContinueWhenAll(tableOfWebClientTasks, tasks =>
{
Parallel.ForEach(tasks, task =>
{
// To get the url just do:
var url = taskIdToUrl[task.Id];
});
});
. 所属していません StackOverflow