WebRequest slower in multiply tasks












0















When I work on the WebRequest inside tasks under Mono, I found that it's very slow to get response from server. But it very fast if sending request out Task. I did some research but there is no solution for it. The code works well on Windows and .NET Core on Linux. So I guess it maybe a problem on Mono. Hope someone can help me out of it.



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


The Mono version: 5.16.0.179.
Ubuntu: 16.04.2 LTS.










share|improve this question























  • I think the issue is something else because I just switched the execution sequence like first without Task and then with the Task. Now it takes almost the same time.

    – Keyur Ramoliya
    Nov 21 '18 at 10:01











  • Are you able to use HttpClient instead?

    – mjwills
    Nov 21 '18 at 10:24











  • @Keyur Ramoliya I tried it again based on your description. At first time, it worked like your description, it took almost the same time, however I ran it a few times, it became very slow, even took approximately 5s to finish the task.

    – yangtam
    Nov 22 '18 at 1:58











  • @mjwills Unfortunately, I was unable to use HttpClient instead, because it's from the a libaray.

    – yangtam
    Nov 22 '18 at 2:00













  • try to do the same but with http instead of https, maybe the bottleneck is in the TLS negotiation

    – knocte
    Nov 29 '18 at 5:40
















0















When I work on the WebRequest inside tasks under Mono, I found that it's very slow to get response from server. But it very fast if sending request out Task. I did some research but there is no solution for it. The code works well on Windows and .NET Core on Linux. So I guess it maybe a problem on Mono. Hope someone can help me out of it.



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


The Mono version: 5.16.0.179.
Ubuntu: 16.04.2 LTS.










share|improve this question























  • I think the issue is something else because I just switched the execution sequence like first without Task and then with the Task. Now it takes almost the same time.

    – Keyur Ramoliya
    Nov 21 '18 at 10:01











  • Are you able to use HttpClient instead?

    – mjwills
    Nov 21 '18 at 10:24











  • @Keyur Ramoliya I tried it again based on your description. At first time, it worked like your description, it took almost the same time, however I ran it a few times, it became very slow, even took approximately 5s to finish the task.

    – yangtam
    Nov 22 '18 at 1:58











  • @mjwills Unfortunately, I was unable to use HttpClient instead, because it's from the a libaray.

    – yangtam
    Nov 22 '18 at 2:00













  • try to do the same but with http instead of https, maybe the bottleneck is in the TLS negotiation

    – knocte
    Nov 29 '18 at 5:40














0












0








0








When I work on the WebRequest inside tasks under Mono, I found that it's very slow to get response from server. But it very fast if sending request out Task. I did some research but there is no solution for it. The code works well on Windows and .NET Core on Linux. So I guess it maybe a problem on Mono. Hope someone can help me out of it.



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


The Mono version: 5.16.0.179.
Ubuntu: 16.04.2 LTS.










share|improve this question














When I work on the WebRequest inside tasks under Mono, I found that it's very slow to get response from server. But it very fast if sending request out Task. I did some research but there is no solution for it. The code works well on Windows and .NET Core on Linux. So I guess it maybe a problem on Mono. Hope someone can help me out of it.



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


The Mono version: 5.16.0.179.
Ubuntu: 16.04.2 LTS.







c# multithreading mono webrequest






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 21 '18 at 9:30









yangtamyangtam

378




378













  • I think the issue is something else because I just switched the execution sequence like first without Task and then with the Task. Now it takes almost the same time.

    – Keyur Ramoliya
    Nov 21 '18 at 10:01











  • Are you able to use HttpClient instead?

    – mjwills
    Nov 21 '18 at 10:24











  • @Keyur Ramoliya I tried it again based on your description. At first time, it worked like your description, it took almost the same time, however I ran it a few times, it became very slow, even took approximately 5s to finish the task.

    – yangtam
    Nov 22 '18 at 1:58











  • @mjwills Unfortunately, I was unable to use HttpClient instead, because it's from the a libaray.

    – yangtam
    Nov 22 '18 at 2:00













  • try to do the same but with http instead of https, maybe the bottleneck is in the TLS negotiation

    – knocte
    Nov 29 '18 at 5:40



















  • I think the issue is something else because I just switched the execution sequence like first without Task and then with the Task. Now it takes almost the same time.

    – Keyur Ramoliya
    Nov 21 '18 at 10:01











  • Are you able to use HttpClient instead?

    – mjwills
    Nov 21 '18 at 10:24











  • @Keyur Ramoliya I tried it again based on your description. At first time, it worked like your description, it took almost the same time, however I ran it a few times, it became very slow, even took approximately 5s to finish the task.

    – yangtam
    Nov 22 '18 at 1:58











  • @mjwills Unfortunately, I was unable to use HttpClient instead, because it's from the a libaray.

    – yangtam
    Nov 22 '18 at 2:00













  • try to do the same but with http instead of https, maybe the bottleneck is in the TLS negotiation

    – knocte
    Nov 29 '18 at 5:40

















I think the issue is something else because I just switched the execution sequence like first without Task and then with the Task. Now it takes almost the same time.

– Keyur Ramoliya
Nov 21 '18 at 10:01





I think the issue is something else because I just switched the execution sequence like first without Task and then with the Task. Now it takes almost the same time.

– Keyur Ramoliya
Nov 21 '18 at 10:01













Are you able to use HttpClient instead?

– mjwills
Nov 21 '18 at 10:24





Are you able to use HttpClient instead?

– mjwills
Nov 21 '18 at 10:24













@Keyur Ramoliya I tried it again based on your description. At first time, it worked like your description, it took almost the same time, however I ran it a few times, it became very slow, even took approximately 5s to finish the task.

– yangtam
Nov 22 '18 at 1:58





@Keyur Ramoliya I tried it again based on your description. At first time, it worked like your description, it took almost the same time, however I ran it a few times, it became very slow, even took approximately 5s to finish the task.

– yangtam
Nov 22 '18 at 1:58













@mjwills Unfortunately, I was unable to use HttpClient instead, because it's from the a libaray.

– yangtam
Nov 22 '18 at 2:00







@mjwills Unfortunately, I was unable to use HttpClient instead, because it's from the a libaray.

– yangtam
Nov 22 '18 at 2:00















try to do the same but with http instead of https, maybe the bottleneck is in the TLS negotiation

– knocte
Nov 29 '18 at 5:40





try to do the same but with http instead of https, maybe the bottleneck is in the TLS negotiation

– knocte
Nov 29 '18 at 5:40












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53408938%2fwebrequest-slower-in-multiply-tasks%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53408938%2fwebrequest-slower-in-multiply-tasks%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Xamarin.form Move up view when keyboard appear

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Anylogic : not able to use stopDelay()