gpt4 book ai didi

c# - 等待 HttpClient 和 do-while 循环

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:47 26 4
gpt4 key购买 nike

我有一种方法可以将一些数据发布到服务器。服务器可能返回 aswer 意味着我需要更改 URL 并将数据发送到其他服务器。我使用来自 4.5 框架的 HttpClient 类。我使用 do-while 循环来重复请求,直到不需要重定向为止。但是有一个问题。

问题是为什么如果我在循环外创建 HttpClient 实例,第二个 await 没有发生并且我的程序退出循环,但是如果我创建 循环中的 HttpClient 实例一次又一次 - 一切都很好吗?我可以在异步方法中的 do-while 循环中为多个 POST 请求重用一个 HttpClient 吗?

我的工作代码示例:

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;
}

我的第二个代码在第二个循环中没有等待 await

最佳答案

好的,现在我们得到了异常...

我怀疑问题不是重用 HttpClient - 它是重用这个:

var content = new StringContent(this.SendStr);

我怀疑 content 可能被 HttpClientfirst 调用处理,这导致第二次调用失败。

只需将该行移到循环内(它在您的工作代码的循环内),我希望一切都会好起来。

关于c# - 等待 HttpClient 和 do-while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14654704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com