【发布时间】:2014-02-26 07:16:47
【问题描述】:
我正在尝试编写以下方法:
public async Task<string> GetJson(string url,
Dictionary<string,string> parameters = null){
// parameters?
if (parameters != null) {
if (parameters.Count > 0) {
url += "?";
foreach(var key in parameters.Keys){
// add parameter to url
url += String.Format("{0}={1}", key, parameters[key]);
// more parameters?
if(!parameters.Keys.Last ().Equals(key)){
url += "&";
}
}
}
}
// send request
var uri = new Uri(url);
var req = new HttpClient();
Task<string> getJsonTask = req.GetStringAsync(uri);
// EXCEPTION : 'Cannot await on Task<string>'
return await getJsonTask;
}
我在编译时遇到错误。我认为问题不在于语法。我认为是一个依赖问题。我的参考资料是:
我使用 Nuget 添加了它们。关于可能是什么问题的任何想法?
提前致谢。
更新
Selman22 建议:
public async Task<string> GetJson(string url, Dictionary<string,string> parameters = null){
// ...
return await req.GetStringAsync(uri); // Same exception
}
肯尼斯建议:
public Task<string> GetJson(string url, Dictionary<string,string> parameters = null){
// ...
return req.GetStringAsync(uri); // no problems here
}
// Later when trying to invoke GetJson
public async Task<List<Station>> GetStations(){
var url = String.Format(
"?{0}_id{1}&_render=json",
DublinBikeDataProvider.BASE_URL,
DublinBikeDataProvider.STATIONS
);
var json = await this._httpClient.GetJson(url); // same exception
return this.ParseStations(json);
}
【问题讨论】:
-
你试过
return await req.GetStringAsync(uri)吗? -
附带说明:在这种情况下,您不需要使用异步等待。您可以只返回一个任务,该方法将是可等待的。仅当您想在等待之后做某事时才有用。
-
将其作为图片而非文字发布的任何具体原因?
-
Kenneth:这种情况下的行为是不一样的,因为抛出的异常不会被包装在返回的任务中。大多数人并不期望任务返回方法直接抛出。
-
您是否安装了
Microsoft.Bcl.Async?安装 NuGet 库后,您是否更改了 PCL 的目标平台?
标签: c# xamarin async-await portable-class-library