Come restituire un altro valore dal metodo in "terzi" lib?
-
12-12-2019 - |
Domanda
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.
});
});
.
Potrei, ad esempio, creare la classe (con due proprietà pubbliche, una per compito e il secondo per URL) e l'istanza di restituzione.Ma questo metodo che ho collegato con altri metodi.
Hai qualche soluzione per questo problema?
Soluzione
Se vuoi essere in grado di associare le tue attività con l'URL che li ha creati puoi utilizzare un dizionario per fare la mappatura:
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];
});
});
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow