Ich arbeite an einer C# Web-API, die eine bestimmte Aktion mit einem Drittanbieter-API-1 ausführt, das gleichzeitig für Geschwindigkeit ausgeführt wird. Sobald ich meine Ausgabe vom Drittanbieter-API-1 erhalten habe, würde ich mit dem Drittanbieter-API-2 weiter zusätzliche Verarbeitung erhalten, die erneut gleichzeitig ausgeführt werden soll, und die Ergebnisse würden an die Ergebnisse von beigefügt werden Drittanbieter-API-1, und schließlich würde die Ausgabe meiner API an den Anrufer zurückgesandt.
Meine API empfängt Eingabe < /li>
Meine API ruft gleichzeitig Drittanbieter-api-1 auf, was ich für die Geschwindigkeit behalten möchte < /li>
< LI> meine API ruft Drittanbieter-API-2 auf und möchte sie erneut behalten. zu Drittanbietern-API-1 und Drittanbieter-API-2 werden durchgeführt, damit ich die Ausgänge wieder eingeben und das Ergebnis an den Anrufer zurückgeben kann. Wenn ich eine Kontrolle über Drittanbieter-API-1 & 2 hätte, hätte ich einige Korrelations-IDs in den Anfrage-Header festgelegt und auch in der Antwort bestehen, aber ich kann das mit meiner APIs von Drittanbietern nicht tun.
Mein Problem ist, dass ich, sobald ich meine HTTP -GET -Anforderungen in einen gleichzeitigen Modus konstruiere, jede Antwort nicht mehr auf die ursprüngliche Anforderung zurückbinden kann. < /p>
Gibt es eine Möglichkeit, das zu erreichen, was ich versuche zu tun? Oder ist mein Versuch vergeblich oder schlechtes Design zusammen? < /P>
// I build my get query inputs from my user request
foreach (ParsedInputAddress ia in inaddr)
{
.
.
.
addresses.Add(addrbuilder.ToString());
addrbuilder.Clear();
}
.
// I call the http concurrently
IEnumerable getTasks = addresses.Select(async ia => await httpClient.GetAsync(basepath + ia.ToString()));
var gets = await Task.WhenAll(getTasks);//this tasks will run concurrently
foreach (var getContent in gets)
{
jsonResponse = await getContent.Content.ReadAsStringAsync();
if (jsonResponse != null)
vaddr = JsonSerializer.Deserialize(jsonResponse);
if (vaddr != null && vaddr.address != null)
vaddresses.Add(vaddr.address);
}
< /code>
Ich habe versucht, eine benutzerdefinierte HTTP-Anfrage mit einem eindeutigen GUID festzulegen, aber da ich keine Kontrolle über Drittanbieter habe, kann ich diese ID in der Antwort nicht erhalten, um sie zusammenzubinden .
Mein letztes Ausweg ist es, dies zu einer nicht-konzrientischen Ausführung zu machen, sodass jede Anforderung nacheinander verarbeitet wird, wobei die Verbindung zwischen Anforderung und Antwort erhalten bleibt.
Verbinden Sie die HTTP -Antwort auf seine HTTP -Anforderung in einer gleichzeitigen Ausführung ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post