Ich bin auf der Suche nach Feedback auf den folgenden Code. Ich habe gelesen here, dass ich die Verwendung von Async void vermeiden sollte.Aufruf der WCF-Methode asynchron
So als Ergebnis habe ich folgendes in einem Verfahren implementiert ..
foreach (var sample in returns)
{
_logger.Debug("Calling async method");
var resultFromMethodCall = CallMethodAsync(uploadReturn);
_logger.Debug("Continuing....");
}
async Task<Tuple<bool,long>> CallMethodAsync(Sample sampleReturn)
{
try
{
Service1Client client = new Service1Client();
Tuple<bool, long> results = await client.ValidateSampleReturnAsync(sampleReturn);
_logger.Debug("call to Sample Return validator completed for sample: {0}", results.Item2);
return results;
}
catch (Exception ex)
{
_logger.Error(ex, "Error occured while calling WCF service");
return new Tuple<bool, long>(false, sampleReturn.Id);
}
}
Wenn ich nichts mit der zurückgegebenen Variablen resultFromMethodCall tun, zeigt die Protokollierung der alle funktioniert, wie ich erwartet. Wenn ich jedoch Objekte aus der Variable resultFromMethodCall auslogge, scheint es jetzt synchron zu laufen, während es darauf wartet, dass das Objekt von dem Aufruf zurückgegeben wird.
Fehle ich etwas offensichtlich hier? Oder verstehe ich völlig falsch, wie das funktioniert.
Der aufrufende Standort wartet auf das Ergebnis der Aufgabe, wenn Sie das Ergebnis der Aufgabe verwenden. Alles, was zwischen dem Aufruf der asynchronen Methode und der Verwendung des Ergebnisses der asynchronen Methode liegt, wird ausgeführt, ohne auf das Ergebnis der Aufgabe zu warten. – Maarten
Vermissen Sie nicht eine Wartezeit in Ihrem Anrufcode? – Maarten
Ist es in Ordnung, dass ich nichts mit dem Ergebnis der Aufgabe mache? Auch das Warten ist in der asynchronen Methode, die aufgerufen wird ... – Fiona