ich einen externen Service nenne wird 4,5Aufruf externen HTTP-Dienstes Httpclient von einer Web-API Aktion mit
Der Beispielcode wie folgt (ignorieren die Rückgabewerte als diese Beispielcode ist ein externer Service zu testen Aufruf):
public class ValuesController : ApiController
{
static string _address = "http://api.worldbank.org/countries?format=json";
private string result;
// GET api/values
public IEnumerable<string> Get()
{
GetResponse();
return new string[] { result, "value2" };
}
private async void GetResponse()
{
var client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(_address);
response.EnsureSuccessStatusCode();
result = await response.Content.ReadAsStringAsync();
}
}
Während der Code in der privaten Methode in der Tat das Problem, das ich habe nicht funktioniert, ist, dass der Controller Get() die GetResponse() aufruft, aber es wartet nicht auf das Ergebnis, sondern führt sofort die Rückgabe mit result = null aus.
ich auch mit einem WebClient mit einem einfacheren synchronen Aufruf versucht haben, wie folgt:
// GET api/values
public IEnumerable<string> Get()
{
//GetResponse();
var client = new WebClient();
result = client.DownloadString(_address);
return new string[] { result, "value2" };
}
der gut arbeitet.
Was mache ich falsch? Warum wartet Get() nicht auf die Beendigung der privaten Methode im asynchronen Beispiel?
müssen Sie GetResponse() nicht mit gonna abwarten? Sonst wartet das nicht darauf, dass diese Methode beendet wird ... und Ihre Controller-Aktion beendet das Ergebnis direkt, so dass es immer noch null ist. – jishi
Ja, aber ich hatte nicht erkannt, dass ich die Get() als async markieren konnte, die benötigt wird, um zu warten. – Redeemed1