WebRequest在乘法任务中变慢

时间:2018-11-21 09:30:55

标签: c# multithreading mono webrequest

当我在Mono下的任务中处理WebRequest时,我发现从服务器获取响应非常慢。但是如果发送请求出去任务非常快。我做了一些研究,但没有解决方案。该代码在Windows和Linux上的.NET Core上均能正常运行。所以我想这可能是Mono的问题。希望有人可以帮助我。

    public static void Main(string[] args)
    {
        ServicePointManager.DefaultConnectionLimit = 12;
        ServicePointManager.Expect100Continue = false;
        var tasks = Enumerable.Range(0, 10).Select(async _ =>
        {
            var timer = Stopwatch.StartNew();
            await ValidateUrlAsync("https://www.bing.com");

            timer.Stop();
            Console.WriteLine(timer.ElapsedMilliseconds);
            //request.Abort();
        }).ToArray();

        Task.WaitAll(tasks);

        // Single request
        {
            var timer = Stopwatch.StartNew();
            ValidateUrlAsync("https://www.bing.com").ConfigureAwait(false).GetAwaiter().GetResult();
            timer.Stop();
            Console.WriteLine(timer.ElapsedMilliseconds);
        }
        Console.Read();
    }

    public static async Task<bool> ValidateUrlAsync(string url)
    {
        using(var response = (HttpWebResponse)await WebRequest.Create(url).GetResponseAsync())
            return response.StatusCode == HttpStatusCode.OK;
    }

Mono版本:5.16.0.179。 Ubuntu:16.04.2 LTS。

0 个答案:

没有答案