WebRequest slower in multiply tasks
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
|
show 2 more comments
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
I think the issue is something else because I just switched the execution sequence like first withoutTask
and then with theTask
. Now it takes almost the same time.
– Keyur Ramoliya
Nov 21 '18 at 10:01
Are you able to useHttpClient
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
|
show 2 more comments
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
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
c# multithreading mono webrequest
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 withoutTask
and then with theTask
. Now it takes almost the same time.
– Keyur Ramoliya
Nov 21 '18 at 10:01
Are you able to useHttpClient
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
|
show 2 more comments
I think the issue is something else because I just switched the execution sequence like first withoutTask
and then with theTask
. Now it takes almost the same time.
– Keyur Ramoliya
Nov 21 '18 at 10:01
Are you able to useHttpClient
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
|
show 2 more comments
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
I think the issue is something else because I just switched the execution sequence like first without
Task
and then with theTask
. 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