Ho il seguente metodo:Come si chiama un metodo asincrono da un metodo non async?
public string RetrieveHolidayDatesFromSource() {
var result = this.RetrieveHolidayDatesFromSourceAsync();
/** Do stuff **/
var returnedResult = this.TransformResults(result.Result); /** Where result gets used **/
return returnedResult;
}
private async Task<string> RetrieveHolidayDatesFromSourceAsync() {
using (var httpClient = new HttpClient()) {
var json = await httpClient.GetStringAsync(SourceURI);
return json;
}
}
È possibile che questo non funziona e sembra non prodotto risultati in modo corretto. Non sono sicuro di dove mi manca una dichiarazione per forzare l'attesa di un risultato? Voglio il metodo RetrieveHolidayDatesFromSource() per restituire una stringa.
Quanto segue funziona bene ma è sincrono e credo che possa essere migliorato? Si noti che il sotto è sincrono in cui vorrei passare ad Asincrono ma non riesco a girarmi intorno per qualche motivo.
public string RetrieveHolidayDatesFromSource() {
var result = this.RetrieveHolidayDatesFromSourceAsync();
/** Do Stuff **/
var returnedResult = this.TransformResults(result); /** This is where Result is actually used**/
return returnedResult;
}
private string RetrieveHolidayDatesFromSourceAsync() {
using (var httpClient = new HttpClient()) {
var json = httpClient.GetStringAsync(SourceURI);
return json.Result;
}
}
Mi manca qualcosa?
Nota: per qualche motivo, quando si interrompe il metodo Async sopra riportato, quando arriva alla riga "var json = attende httpClient.GetStringAsync (SourceURI)" si esce dal breakpoint e non posso tornare indietro il metodo.
È 'public Task RetrieveHolidayDatesFromSourceAsync()' manca un 'await'? –
@NickWeaver: No. Non è 'async', quindi non può usare' await'. –
Capisco. Mi chiedevo poiché il nome del metodo indica "Async" alla fine. Perché non è impostato su asincrono? –