HttpWebRequest - puis-je faire plusieurs appels à la sametime à partir de plusieurs threads

- Je utiliser HttpWebRequest de créer des demandes de pages web, de les analyser.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);

puis si plusieurs threads appel

HttpWebResponse response = (HttpWebResponse)request.GetResponse()

dans le même temps, chacun doit-il obtenir sa propre réponse ou est-il possible pour le thread 2 pour obtenir la réponse pour thread7 par exemple?

Obs: l'adresse est la même pour tous les threads, uniquement l'après changement des paramètres de

 public class CheckHelper
{
public  string GetPOSTWebsiteResponse(string WebAddress, string year)
{
StringBuilder QuerryData = new StringBuilder();
String ResponseString;
QuerryData.Append("forYear"+ "=" + year);
#region build request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(WebAddress);
//Set the Method property of the request to POST
request.Method = "POST";
NameValueCollection headers = request.Headers;
Type t = headers.GetType();
PropertyInfo p = t.GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.IgnoreCase | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);
p.SetValue(headers, false, null);
byte[] byteArray = Encoding.UTF8.GetBytes(QuerryData.ToString());
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
#endregion
//Get the request stream.
using (Stream requestStream = request.GetRequestStream())
{
//Write the data to the request stream.
requestStream.Write(byteArray, 0, byteArray.Length);
//Close the Stream object.
}
#region get response
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
//Get the stream containing content returned by the server.
using (var responseStream = response.GetResponseStream())
{
//Open the stream using a StreamReader for easy access.
using (StreamReader responseReader = new StreamReader(responseStream))
{
//Read the content.
ResponseString = responseReader.ReadToEnd();
}
}
}
#endregion        
return ResponseString;
}
}

c'est la façon dont j'utilise la méthode:

            Dictionary<int, Thread> threads=new Dictionary<int,Thread>();
foreach (var year in AvailableYears)
{
threads[year] = new Thread(delegate()
{
var client=new CheckHelper(); 
string response=client.GetPOSTWebsiteResponse("http://abc123.com", year.ToString())
//The thread for year 2003 may get the response for the year 2007
responsesDictionary[year]=response;
});
threads[year].Start();
}
//this is to force the main thread to wait until all responses are    received:
foreach(var th in threads.Values){
th.Join(10000);
}

S'il vous plaît dites-moi où je me trompe? Comment dois-je changer le code? S'il vous plaît aider, je ne peux pas trouver quelque chose d'utile sur le web!

Êtes-vous de la création de la demande dans le même thread qui est de la réception de la réponse? Si oui, alors vous ne devriez pas avoir un problème avec les réponses de se mêler. Pouvez-vous mettre à jour votre question pour être plus précis? Merci!
oui. GetPOSTWebsiteResponse méthode est de faire les deux httprequest et httpresponse. Yhis méthode est appelée par chaque thread separatelly. Je n'utilise pas d'autres threads dans une méthode que celles que vous voyez dans l'exemple de code. Espère que je suis clair, si non, merci de demander
Quelle est la version de .net vous aide?
.Net framework 4
vous devriez être en utilisant les méthodes asynchrones plutôt que de frai de threads. C'est principalement une I/O bound opération, la ponte des threads n'est pas vraiment nécessaire. Deuxièmement, si vous avez modifié le DefaultConnection limite, vous n'obtenez pas plus de 2 threads en même temps depuis la limite par défaut est de 2 par domaine et vous allez depuis le même domaine...

OriginalL'auteur Ryan | 2011-02-19