增加异步HttpClient GetStringAsync速度。如果我在同一时间传递不同的值进行检查,则不会产生任何差异

时间:2017-09-10 12:07:10

标签: c# task httpclient

如果用户名变为可用,我正在检查我自己的服务器。此代码将在while循环中运行,直到条件变为true并且将执行其他一些代码。

我的问题:

我将在int amount参数中存储哪个值无关紧要。检查的速度将保持不变。

这可能是由某些DefaultConnectionLimit或类似的东西造成的吗?

我目前想做什么:

我想增加以下值:

int amount = Int32.Parse(bunifuCustomLabel11.Text);

同时运行更多检查。但在某些特定点上,速度不会再增加。因此,假设我将值100传递,然后代码将以与我输入200时相同的速度执行。

功能:检查句柄/用户名的当前状态并返回true或false:

private async Task CheckUntilOneOfTheUsersIsAvaliable()
{
    int amount = Int32.Parse(bunifuCustomLabel11.Text);
    await Task.WhenAny(Enumerable.Range(0, amount).Select(i => CheckUntilUserIsAvaliable()));

    // If aviable run some other code..
}

private async Task CheckUntilUserIsAvaliable()
{
    while (!await IsUserAvaliable(bunifuMetroTextbox3.Text) && changedUser == false)
    {
        // method_5 increaes a label
        method_5();
        await Task.Delay(1000);
    }
}

private async Task<bool> IsUserAvaliable(string handle)
{
    while (true)
    {
        using (HttpClient client = new HttpClient())
        {
            try
            {
                string content = await client.GetStringAsync("http://urlcom/script.php?user=" + handle);
                return content.Contains("No users found");
            }
            catch (WebException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

有一些限制
  1. 可以并行运行的任务数。当然不是100,甚至不是200.

  2. 服务或托管服务器允许来自同一客户端的连接数。

  3. 您可以编写一些调试日志,以查看有多少HttpClient个实例正在与服务器进行通信。