我有这段代码:
using (var client = new HttpClient())
{
var values = new Dictionary<string, string>
{
{"site_id","001"},
{"apikey","abc01201az1024"},
{"trans_id","45364136"},
};
// Get the parameters in the url encoded format
var content = new FormUrlEncodedContent(values);
//Send request
var response = await client.PostAsync(url, content);
DataRoot<Transaction> outPut = null;
if (response.IsSuccessStatusCode)
{
//Get Response
var result = await response.Content.ReadAsStringAsync();
JsonConvert.DeserializeObject<DataRoot<Transaction>>(result);
}
return outPut;
}
在此阶段的调试模式下,代码不会产生任何响应,也不会产生错误代码但会停止运行:
//Send request
var response = await client.PostAsync(url, content);
答案 0 :(得分:0)
您确定它实际上没有返回响应并继续执行吗?因为等待执行client.PostAsync(),所以可以在不同的线程上继续执行。因此,如果您只是逐行调试(通过F10或类似方法),则可能看起来该方法永远不会返回;实际上整个方法已经完成执行,程序正在运行。
您可能需要在方法中添加另一个断点(在PostAsync方法调用之后)。当PostAsync方法在另一个线程上返回时,您的调试器应该到达下一个断点。
答案 1 :(得分:0)
可能有更好的方法,但这解决了我的问题。使用wait从另一个方法调用您的方法:-
public static async Task<string> AuthenticateUser()
{
var t = Task.Run(() => ClassObject.AuthenticateUser("me"));
t.Wait();
Console.WriteLine(t.Result);
Console.ReadLine();
return "ok";
}
答案 2 :(得分:0)
像这样使用await可能会陷入僵局。
您可以在异步方法中使用ConfigureAwait(false)
来防止这种死锁。
将代码更新为:
var response = await client.PostAsync(url, content).ConfigureAwait(false);
这将解决问题。