Warum verwendet HttpClient.GetAsync()/PostAsync()/SendAsync() usw. nur zwei Anfragen gleichzeitig?HttpClient.GetAsync führt nur 2 Anfragen gleichzeitig aus?
I getestet dies auf folgende Weise:
I einen async GET-Methode haben, die 10 Sekunden lang wartet, bevor es reagiert, ohne zu blockieren.
public async Task<string> Get()
{
var guid = Guid.NewGuid();
System.Diagnostics.Trace.WriteLine($"{guid}: {DateTime.Now.ToLongTimeString()}: start");
await Task.Delay(10000);
System.Diagnostics.Trace.WriteLine($"{guid}: {DateTime.Now.ToLongTimeString()}: end");
return "hello";
}
Wenn ich den Endpunkt von Chrome aufrufen, indem Sie mehrmals Auffrischen Ich sehe sie alle ausführen, sobald ich refresh getroffen, und ich erhalte die Antworten 10 Sekunden später:
39a20541-a2d6-4cd0-99cd-db0987e273e9: 5:32:44 PM: start
8326d829-28a6-48a2-9874-6506b79488af: 5:32:44 PM: start
aecfbb10-266c-46f8-be3b-bfc2fadf0775: 5:32:44 PM: start
78932f53-37a5-4f26-a56f-b3196256e1cf: 5:32:44 PM: start
39a20541-a2d6-4cd0-99cd-db0987e273e9: 5:32:54 PM: end
8326d829-28a6-48a2-9874-6506b79488af: 5:32:54 PM: end
aecfbb10-266c-46f8-be3b-bfc2fadf0775: 5:32:54 PM: end
78932f53-37a5-4f26-a56f-b3196256e1cf: 5:32:54 PM: end
Aber wenn ich machen Verwendung nennt diesen Code in einer Konsolenanwendung:
var client = new HttpClient();
for (var ii = 0; ii < 10; ii++)
{
client.GetAsync("http://localhost:50621/api/default");
}
Console.ReadKey();
ich sehe, dass Console.ReadKey();
sofort erreicht, sind aber die Anforderungen je zwei ausgeführt - es macht 2-Anfragen , dann wartet 10 Sekunden, um zu beenden, dann weitere 2, weitere 10 Sekunden usw., obwohl alle 10 angeblich geplant worden sind.
80546610-c20e-4ff1-b6e5-0fe1688e8803: 5:39:10 PM: start
9bbbb707-9ea7-44da-9d5b-03efc3c4aa47: 5:39:10 PM: start
80546610-c20e-4ff1-b6e5-0fe1688e8803: 5:39:20 PM: end
9bbbb707-9ea7-44da-9d5b-03efc3c4aa47: 5:39:20 PM: end
a146c3ca-a0d2-4588-b60b-156f1febc944: 5:39:20 PM: start
b71bc77f-9bdb-4aa6-936e-c702eb7d49eb: 5:39:20 PM: start
....
Warum sind nicht alle Anfragen sofort gemacht? Hat HttpClient eine Art Limit für ausstehende Anfragen?