2012-06-24 18 views
107

In allen Beispielen, die ich von Verwendungen von HttpClient finden kann, wird es für einmalige Anrufe verwendet. Was aber, wenn ich eine persistente Client-Situation habe, in der mehrere Anfragen gleichzeitig gestellt werden können? Grundsätzlich ist es sicher, client.PostAsync auf 2 Threads gleichzeitig gegen dieselbe Instanz von HttpClient aufzurufen.Kann HttpClient gleichzeitig verwendet werden?

Ich bin nicht wirklich auf der Suche nach experimentellen Ergebnissen hier. Ein funktionierendes Beispiel könnte einfach ein Zufallsfehler (und ein hartnäckiger Fehler) sein, und ein fehlerhaftes Beispiel kann ein Problem der Fehlkonfiguration sein. Idealerweise suche ich nach einer autoritativen Antwort auf die Frage der Concurrency-Behandlung in HttpClient.

+2

Lesen Sie auch diese Frage für weitere Informationen zur richtigen Verwendung von 'HttpClient' und entsorgen Sie es: http://stackoverflow.com/que stents/15705092/do-httpclient-and-httpclienthandler-have-to-be- –

Antwort

97

According to MSDN, da .NET 4.5 Die folgenden Instanzmethoden threadsicher (dank @ischell) sind:

CancelPendingRequests 
DeleteAsync 
GetAsync 
GetByteArrayAsync 
GetStreamAsync 
GetStringAsync 
PostAsync 
PutAsync 
SendAsync 
+3

Ja, da war ich mir nicht sicher, denn es scheint eine Standardwarnung für alles auf MSDN zu sein (und ich erinnere mich, einige MSDN gelesen zu haben) Blogs darüber, wie manchmal diese Warnung falsch ist, da sie blind auf alles angewandt wird). –

+1

@AlexK: Nun, ich würde nichts glauben, was ich höre. Schau dir dieses an: http://msdn.microsoft.com/en-us/library/dd287191.aspx. Also würde ich MSDN im Allgemeinen vertrauen. –

+0

Nun, die Blogs sind auch auf MSDN, ein Rätsel :) Auf jeden Fall, ich denke, ich werde auf der Seite der Vorsicht irren, und tun Client pro Anfrage Strategie. –

13

eine gefunden MSDN forum post von Henrik F. Nielsen (einer von Httpclient des Hauptarchitekten).

Quick Zusammenfassung:

  • Wenn Sie Wünsche haben, die verwandt sind (oder werden Schritt auf einander nicht), dann die gleiche Httpclient verwenden macht sehr viel Sinn.
  • In general würde ich empfehlen, HttpClient-Instanzen so oft wie möglich wieder zu verwenden. Hier
81

ist ein weiterer article von Henrik F. Nielsen über Httpclient, wo er sagt:.

"Die Standard-Httpclient die einfachste Art und Weise ist, in der Sie Anfragen zu senden beginnen Eine einzelne Httpclient verwendet werden können, um Senden Sie so viele HTTP-Anfragen wie Sie möchten so in vielen Szenarien können Sie nur einen HttpClient erstellen und dann für alle Ihre Anfragen verwenden.

+4

Was ist, wenn der Benutzername und das Passwort zwischen Threads ändern können? das ist, was ich nicht finden kann jemand zu sprechen –

+1

@ NicholasDiPiazza: wie oft ändert es sich? Wenn es eine bekannte Gruppe von Benutzer/Passwort-Paaren gibt, können Sie einen Pool von HttpClient-Instanzen erstellen. –

+0

yep das ist, was ich am Ende getan habe –

Verwandte Themen