我有以下方法:如何从非异步方法调用异步方法?
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'。 –
我明白了。我想知道,因为该方法的名称最后说“异步”。为什么不设置为异步? –