Du hast recht, ich habe es auch schon an Google ausprobiert, alles kein Problem. Jeder Thread wird korrekt abgearbeitet.
Der einzigste Unterschied, bei mir wird eine autorisierte Anfrage gemacht mithilfe von CookieContainer, ansonsten habe ich keine Ahnung woran es liegen könnte. Nun habe ich es schon an diversen Seiten ausprobiert, bei 30% der Seiten funktioniert es ohne Probleme, ich lasse 50 Threads starten, es werden 50 Threads korrekt abgearbeitet, aber dann gibt es eben auch Webseiten, bei denen ich 30 Anfragen mache und immer, wirklich immer genau die Hälfte korrekt abläuft. Mache ich 25 Anfragen, sind es 13 korrekte.
Es wäre ja verständlich, wenn der Server nicht mehr Anfragen von einer IP zulässt und deswegen der Timeout hervorgerufen wird, aber ich kann wie gesagt ja die Zahl nach oben schrauben auf z.B. 60, dann würden 30 ausgeführt werden. Dadurch wird das ganze ja Problem so mysteriös.
Ich hatte auch schon in Betracht gezogen, dass es vielleicht an meinem Computer oder an meinem Router liegen könnte?!
edit:
Es wird immer geiler. Ich habe mal einen weiteren response eingefügt, sodass wenn ein Timeout ausgelöst wird, es noch einmal versucht wird.
Phänomen:
Es werden bei 20 Schleifendurchläufen, 10 korrekt abgearbeitet, restlichen 10 liefern einen Timeout, die 10 werden durch den try catch Block erneut ausgeführt. Nun werden 5 von den verbleibenden 10 korrekt ausgeführt, und die anderen 5 liefern wieder einen Timeout.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| try { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.CookieContainer = cookiecontainer; HttpWebResponse response; try { response = (HttpWebResponse)request.GetResponse(); } catch { response = (HttpWebResponse)request.GetResponse(); } StreamReader sr = new StreamReader(response.GetResponseStream()); string html = sr.ReadToEnd(); return html; } |