我有一个解析JSON对象结果的方法。该方法返回一个Task对象,但是当我运行代码时,我收到以下错误:
'System.Collections.Generic.Dictionary<string,object>' does not contain a definition for 'GetAwaiter'
从动态方法返回的对象是System.Collections.Generic.Dictionary和System.Collections.Generic.KeyValuePair类型的对象数组。这是代码:
private static async Task<dynamic> GetReslutstAsync(string url)
{
WebRequest request;
WebResponse response = null;
try
{
request = WebRequest.Create(url);
request.Credentials = new NetworkCredential("username", "password", "company");
//request.Credentials = CredentialCache.DefaultNetworkCredentials;
response = await request.GetResponseAsync();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
using (var reader = new StreamReader(response.GetResponseStream()))
{
try
{
JavaScriptSerializer js = new JavaScriptSerializer();
var objects = js.Deserialize<dynamic>(reader.ReadToEnd());
return objects;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return null;
}
}
}
此处发生异常:
private static async Task<dynamic> MakeRequest(string url)
{
try
{
return await GetReslutstAsync(url).Result; //<---- This is where I get the error!
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return null;
}
}
我认为这与我返回动态类型对象的事实有关。我怎么能绕过这个?我需要在&#34; MakeRequest&#34;中等待这个任务。方法,以便在请求完成之前不会继续。
编辑:
我的&#34; MakeRequest&#34;方法是这样的循环:
while (true)
{
ClockTimer timer = new ClockTimer();
timer.StartTimer(); //<---This does not stop untill 5 sec has passed
MakeRequest("www.someurl.com"); //<--- This just skips into the next loop even if not complete.
}
我的问题是MakeRequest
正在异步运行,所以基本上,它只是跳过这个并直接进入下一个循环。我需要&#34; MakeRequest&#34;在请求完成之前暂停。我已经尝试删除所有async / await关键字,但这只会导致&#34;结果未计算&#34;。
答案 0 :(得分:7)
这就是你需要的:
return await GetReslutstAsync(url);
您不是在等待dynamic
,而是等待返回dynamic
的任务。