我有以下方法:如何從非異步方法調用異步方法?
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;
}
}
以上不工作,似乎無法正常返回任何結果。我不知道我在哪裏錯過了一個強制等待結果的聲明?我想RetrieveHolidayDatesFromSource()方法返回一個字符串。
下面的工作正常,但它是同步的,我相信它可以改進?請注意,以下是我想要更改爲異步的同步,但由於某種原因無法將頭部纏繞。
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;
}
}
我錯過了什麼嗎?
注意:由於某種原因,當我斷開上面的Async方法時,當它到達「var json = await httpClient.GetStringAsync(SourceURI)」行時,它剛剛離開斷點,我不能回到方法。
是'公共任務 RetrieveHolidayDatesFromSourceAsync()'缺少'await'? –
@NickWeaver:不是,它不是'async',所以它不能使用'await'。 –
我明白了。我想知道,因爲該方法的名稱最後說「異步」。爲什麼不設置爲異步? –