Hier Ich überprüfe für propertie wenn es migrierten oder In-Progress, Wenn In-Fortschritt dann möchte ich nicht für Web Response
Nachricht warten von URL
geliefert, so HttpPost
Verfahren in Hintergrund laufen soll und calling method
sollte seine Aufgabe ausführen gleichzeitig. Um diese Funktionalität zu erreichen, habe ich async
und await
in den folgenden Methoden verwendet.Wie async verwenden und in C# erwarten?
unten ist das Verfahren zum Post und XML
Antwort zurück von URL-Adresse:
public static async Task<string> HttpPost(string url, string message, bool ignoreResponse = false)
{
string lcPostData = null;
string _XmlResponse = string.Empty;
try
{
using (var client = new HttpClient())
{
var httpContent = new StringContent(message, Encoding.UTF8, "application/xml");
var SupplierLinkUri = new Uri(url);
if (!ignoreResponse)
{
var httpResponseMessage = await client.PostAsync(SupplierLinkUri, httpContent);
if (httpResponseMessage.StatusCode == HttpStatusCode.OK)
_XmlResponse = httpResponseMessage.Content.ReadAsStringAsync().Result;
}
else if (ignoreResponse && !(isReservation(message))) //message.Contains("Reservation"))
{
/* I want below lines of code to run asynchronously (i.e. Run in background) So I used Task & await but it fails*/
Task<HttpResponseMessage> httpPostTask = client.PostAsync(SupplierLinkUri, httpContent);
HttpResponseMessage asyncPost = await httpPostTask;
}
}
}
catch (Exception e)
{
}
return _XmlResponse;
}
Das obige Verfahren ausgeführt wird, ohne Fehler, aber ich mag wissen, ob dies ein richtiger Ansatz ist async
und await
in C# zu verwenden, , Muss ich meinen Code irgendwo ändern oder ist er gemäß den genannten Anforderungen korrekt?
await
in else-if
Teil funktioniert nicht. Laut Dokumentation sollte dies asynchronously
, d. H. Im Hintergrund laufen, aber derzeit ist es nicht.
Kann jemand bitte überprüfen und schlägt vor, was im Code falsch ist?
Ist ihre bessere Möglichkeit, dies zu erreichen?
Schätzen Sie alle Vorschläge und Ideen! Danke für die Hilfe!
Wenn Sie die xml in Block bekommen ks vom Server gibt es wirklich nichts, was Sie tun können, um die Daten als kontinuierliche Daten zu erhalten, wenn der Server-Code nicht geändert wird. Get Daten in Block ist wahrscheinlich effizienter als einen großen Datenblock zu erhalten, der eine Speicherausnahme verursachen kann. Riesige XML-Dateien verursachen häufig Speicherausnahmen, und dann müssten Sie einen xmlreader verwenden, der die XML-Datei effektiv in Blöcken liest, so wie Sie es gerade tun. – jdweng
Was versuchst du hier zu machen - und was genau ist das Problem? Wenn das Problem darin besteht, dass Sie erst nach der Rückkehr der Aufgabe eine Antwort von dieser Methode erhalten, wird dies erwartet. – Paddy
@Paddy: Problem ist, ich verwende 'erwarten', um die' client.PostAsync (SupplierLinkUri, httpContent); 'im Hintergrund an anderer Stelle wie Dokumentation, aber es läuft synchron. –