2010-11-06 6 views
0

Voici l'affaire, j'ai un site web qui est nécessaire pour effectuer une recherche depuis plusieurs webservices, puis rejoindre tous les résultats renvoyés par les webservices et les afficher mélangés. Je l'ai fait le code pour la recherche d'un lieu unique à unC# appeler plusieurs webservices en même temps

WsPesquisa pesq = new WsPesquisa(); 
IEnumerable<Objecto> Resultados = pesq.PesquisaObjecto("URL TO SEARCH", "TEXT TO SEARCH"); 

maintenant je dois utiliser les threads pour rechercher dans plusieurs endroits à la fois, mais avoir des doutes comment le faire.

Quelqu'un peut-il fournir un exemple de thread pour appeler plusieurs fois le code que j'ai utilisé ci-dessus, puis joindre les résultats de tous les threads dans une seule liste d'Objectos?

Merci à l'avance

Répondre

0

Une façon de le faire est d'utiliser une requête standard LINQ, et utiliser PLINQ pour paralléliser il.

En supposant que vous avez votre requête stockée dans query, une liste des sites que vous souhaitez rechercher stocké dans la variable appelée sites, et vous avez une méthode SearchSite(string query, string site) qui exécute la recherche sur un seul site, ce qui suit devrait faire l'affaire:

var searchResults = from site in sites.AsParallel() 
        select SearchSite(query, site); 

var resultList = new List<object>(); 
foreach (var searchResult in searchResults) 
{ 
    // process result 
    resultList.Add(searchResult); 
} 

Cela suppose la requête de recherche est le même pour chaque site, donc:

  • AsParallel() indique que vous voulez que votre requête LINQ à exécuter en parallèle
  • select SearchSite(query, site) - prend votre requête et exécute la méthode SearchSite sur elle
  • PLINQ prend soin d'attendre tous les résultats à venir, de sorte que vous pouvez simplement les traiter dans une base régulière pour la boucle
+0

Il a fonctionné! Merci de votre aide. – adaoss

Questions connexes