Ich versuche ein Programm zu machen, das 500 Verbindungen (HTTP Request) zu einer Website simulieren kann. Also möchte ich wissen, wie man die http-Anfragefunktion multipliziert und sie alle zusammen laufen lässt, ohne viele Fäden manuell durch viele Befehle zu erstellen.Wie führe ich einen Befehl in vielen Threads in C#
Antwort
Versuchen Sie unten Code, TaskFactory.FromAsync von der TPL verwenden.
Erstellt eine Aufgabe, die ein Paar beginnen und enden Methoden darstellt, die mit dem asynchronen Programmiermodell Muster entsprechen .
Wenn Sie durch Konsolenanwendung ausgeführt wird, sollten Sie warten alle parallel Aufgaben zu erledigen Task.WaitAll
var tasks = new List<Task>();
for (int i = 0; i < 500; i++)
{
tasks.Add(Task.Run(async() =>
{
var request = WebRequest.Create("http://www.example.com");
var response = (HttpWebResponse)await Task.Factory
.FromAsync<WebResponse>(request.BeginGetResponse,
request.EndGetResponse,
null);
Console.WriteLine($"Request {i} status is {response.StatusCode}");
}));
}
try
{
// Wait for all the tasks to finish.
Task.WaitAll(tasks.ToArray());
}
catch (AggregateException e)
{
for (int j = 0; j < e.InnerExceptions.Count; j++)
{
Console.WriteLine("\n-------------------------------------------------\n{0}", e.InnerExceptions[j].ToString());
}
}
mit Sie for
Schleife mit Parallel.For
ersetzen kann, wird es Aufgabe ausführen in Parallel
Parallel.For(1, 500,
index => {
// web request
});
Aber Sie erwarten nie die Aufgaben, die ausgeführt werden. – john
@John richtig, aber ich weiß nicht, OP-Haupt-Thread – programtreasures
Ich würde immer noch argumentieren, dass Sie in irgendeiner Weise darauf warten sollte demonstrieren. Stellen Sie sich vor, er macht das von einer Konsolenanwendung aus. Es wird beendet, bevor alle Anforderungen abgeschlossen sind. – john
meinst du es?
for(int i=0;i<500;i++)
{
Task.Run(()=>YourFunc());
}
- 1. Wie führe ich einen Befehl in C# aus?
- 2. Wie führe ich einen Befehl ohne Sudo?
- 3. Wie führe ich einen Terminal-Befehl in PHP?
- 4. Wie führe ich einen Befehl von mit in MSI aus?
- 5. Wie führe ich einen ADB-Befehl in Android Studio aus?
- 6. Wie führe ich einen Befehl in der PowerShell aus?
- 7. Wie führe ich einen Shell-Befehl in Python 2.7 aus?
- 8. Wie führe ich einen Prozess nach Abschluss von Threads weiter?
- 9. Powershell und Python - Wie führe ich einen Befehl als Admin
- 10. Wie führe ich einen Batch-Befehl mit Parametern aus PowerShell
- 11. Wie führe ich einen Systembefehl in Qt?
- 12. Wie führe ich einen Befehl aus und bekomme seine Ausgabe
- 13. Wie führe ich einen Shell-Befehl in C# (auf einem Webserver) mit erhöhten Anmeldeinformationen aus?
- 14. Wie führe ich einen Befehl mit String-Formatierung aus?
- 15. Wie führe ich einen Befehl, wenn Atom startet
- 16. Wie führe ich einen Befehl am Terminal von Java-Programm?
- 17. Wie führe ich eine JAR-Datei in mehreren Threads aus?
- 18. Wie führe ich einen cmd Befehl im Browser mit js
- 19. Wie führe ich python subprocess.Popen mit vielen Argumenten aus?
- 20. Wie führe ich einen Befehl im Hintergrund unter Windows aus?
- 21. Wie führe ich einen Befehl über Java-Code aus?
- 22. Wie führe ich einen SQL-Befehl mit Python?
- 23. Wie führe ich einen Befehl in der nächsten Zeile aus (nicht 'Wie schreibe ich einen mehrzeiligen Befehl')
- 24. Wie starte ich Threads in Plain C?
- 25. Wie führe ich jeden Befehl in einer Liste aus?
- 26. Wie führe ich den Befehl rd in Java aus?
- 27. Wie führe ich einen Befehl mit su Erlaubnis
- 28. Wie führe ich einen Windows cmd Befehl mit Qt?
- 29. Wie führe ich einen Befehl nur für bestimmte Bögen aus?
- 30. Wie führe ich einen Alias-Unix-Befehl mit '!' markiere
Erstellen Sie einfach 500 Async-Anfragen und warten Sie nicht auf sie. Dann benutze 'Task.WhenAll'. Sie werden jetzt von Threads abstrahiert. –