In einem C# -Projekt mache ich einige Aufrufe an eine Web-API, die Sache ist, dass ich sie innerhalb einer Schleife in einer Methode mache. Gewöhnlich gibt es nicht so viele, obwohl ich daran dachte, die Parallelität auszunutzen.Wo Parallelität beim Aufruf einer API zu verwenden ist
Was ich bisher versucht, ist
public void DeployView(int itemId, string itemCode, int environmentTypeId)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(ConfigurationManager.AppSettings["ApiUrl"]);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var agents = _agentRepository.GetAgentsByitemId(itemId);
var tasks = agents.Select(async a =>
{
var viewPostRequest = new
{
AgentId = a.AgentId,
itemCode = itemCode,
EnvironmentId = environmentTypeId
};
var response = await client.PostAsJsonAsync("api/postView", viewPostRequest);
});
Task.WhenAll(tasks);
}
}
Aber frage mich, ob dies der richtige Weg ist, oder sollte ich versuchen, die ganze DeployView parallel (dh auch vor der Verwendung des Httpclient)
Jetzt, wo ich sehen sie geschrieben, ich glaube, ich kann nicht einfach die Variable Antwort entfernen und nur die await tun, ohne es zu irgendwelchen variable
Dank Einstellung
Nun eigentlich, das ist eine gute Richtung, die Sie gehen. Aber du hast den wichtigsten Teil vergessen. Sie müssen die Ergebnisse z. * Warten Sie auf Task.WhenAll *, aber dann müssen Sie Ihrer DeployView-Funktion das Schlüsselwort 'async' hinzufügen. Sie sollten einen tieferen Einblick in das [async/await] (https://msdn.microsoft.com/en-us/library/hh191443.aspx) Paradigma erhalten. – ckruczek
Also, was ist das Problem/die Ausnahme, die Sie konfrontiert werden? Ich stimme auch mit ckruczek überein, nichts falsch mit der Richtung, die Sie nehmen .. auch, wollen Sie die Antworten überhaupt bekommen? – ojf
Ich möchte die Antworten bekommen, ja. Aber nicht sicher, wie man sie benutzt, wenn sie alle Ok sind – mitomed