1
我有一种方法将一些数据发布到服务器。服务器可能会返回意味着我需要更改URL并将数据发送到其他服务器。我从4.5框架中为它使用HttpClient
类。我使用do-while循环来重复请求,直到我不需要redirecton。但有一个问题。等待HttpClient和do-while循环
问题是为什么,如果我创建外循环HttpClient
例如,第二await
没有发生,我PROGRAMM走出循环,但如果我在循环中创建HttpClient
实例连连 - 一切都很好?我可以重复使用一个HttpClient
进行do-while循环内的异步方法中的几个POST请求吗?
我的工作代码示例:
public async Task<bool> GameLogin()
{
JToken r;
do
{
var clientHandler = new HttpClientHandler
{
CookieContainer = this.myCContainer,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
};
var client = new HttpClient(clientHandler);
client.DefaultRequestHeaders.Add("client-ver", Versoin);
client.DefaultRequestHeaders.Add("method", "SignIn");
client.DefaultRequestHeaders.Add("authKey", AppParams["auth_key"].ToString());
var content = new StringContent(this.SendStr);
var answer = await client.PostAsync(this.CurrentUrl, content);
var rawString = await answer.Content.ReadAsStringAsync();
DinamicData = JObject.Parse(rawString);
r = DinamicData["r"];
if (r == null) continue;
this.CurrentUrl = string.Format("http://{0}/main.ashx", r);
} while (r != null);
return DinamicData.Type != JTokenType.Null;
}
我没有工作代码示例:
public async Task<bool> GameLogin()
{
var clientHandler = new HttpClientHandler
{
CookieContainer = this.myCContainer,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
};
var client = new HttpClient(clientHandler);
client.DefaultRequestHeaders.Add("client-ver", Versoin);
client.DefaultRequestHeaders.Add("method", "SignIn");
client.DefaultRequestHeaders.Add("authKey", AppParams["auth_key"].ToString());
var content = new StringContent(this.SendStr);
JToken r;
do
{
var answer = await client.PostAsync(this.CurrentUrl, content);
var rawString = await answer.Content.ReadAsStringAsync();
DinamicData = JObject.Parse(rawString);
r = DinamicData["r"];
if (r == null) continue;
this.CurrentUrl = string.Format("http://{0}/main.ashx", r);
} while (r != null);
return DinamicData.Type != JTokenType.Null;
}
我的第二个代码没有在secont循环依次等待await
。
好吧,你说它没有等待 - 发生了什么?有没有例外? –
请注意,当您重复使用相同的HttpClient时,您将在一个会话中有效 - 这肯定会影响如何处理验证等。查看HTTP级别正在发生的事情会很有用,例如,与WireShark。 –
我没有得到答案。我的应用程序离开了do-while和'GameLogin'方法 – Jagget