我有这样的代码:
public async Task<string> getToken()
{
string uri = "http://localhost/api/getToken";
HttpClient client = new HttpClient();
//client.BaseAddress = new Uri(uri);
string token = "asfd";
string baseId = "asfasdf";
string appVersion = "afsadf";
string content = "";
HttpResponseMessage response = null;
try
{
string url = string.Format("{0}?token='{1}'&baseId='{2}'&appVersion='{3}'", uri, token, baseId, appVersion);
//client.BaseAddress = new Uri(url);
response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode();
content = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
}
return content;
}
当我到达线路时GetAsync被称为VS关闭调试模式并且不会抛出任何异常。 在服务器上,我在控制器(mvc web api)中的操作中有断点,但未到达。 但是当我复制url并将其传递给浏览器时,控制器中的操作被调用。 当我更改我的url以获取其他不正确的url时,GetAsync抛出异常,这是在catch中捕获的。 我的应用程序在.net framework 4.5,控制台应用程序中。 也许我必须添加任何DLL?
答案 0 :(得分:1)
您可能不等待异步操作完成。这就是它进入aysnc
调用的原因,该方法返回表示操作的任务,然后应用程序结束。
您需要await
使用getToken
返回任务await getToken()
。如果您使用getToken
方法拨打main
,async
方法不能Task.Wait
,则需要使用static void Main()
{
getToken().Wait();
}
同步等待:
{{1}}