在许多异步请求期间实际有多少个同时(并发)连接处于活动状态

时间:2012-10-17 14:54:16

标签: c# visual-studio-2010 .net-4.0

我的理解是Task是抽象出线程,并且每个Task都不能保证新的线程。

我在VS2010中调试,我有类似的东西:

var request = WebRequest.Create(URL);

Task.Factory.FromAsync<WebResponse>(
    request.BeginGetResponse, 
    request.EndGetResponse).ContinueWith( 
    t => {  /* ... Stuff to do with response ... */ });

如果我对此进行X次来电,例如启动X异步Web请求,如何计算在执行期间的任何给定时间实际进行的同时(并发)连接数量?我假设它只是打开它可以的最大值(在X非常高的情况下),而另一个Tasks在等待时被阻止?

对此的任何了解或我如何检查调试器以确定在执行的给定点存在多少活动(开放)连接将是很好的。

基本上,我想知道它是否为我处理,或者我是否需要特别考虑,以便我似乎不会攻击服务器?

1 个答案:

答案 0 :(得分:1)

这并非真正针对Task。一旦拨打Task.Factory.FromAsync,即会创建外部连接。 Task正在执行的“任务”只是等待响应返回(而不是首先发送它)。因此,如果您的计算机无法再发送任何请求,则对BeginGetResponse的调用将失败,如果服务器因拒绝您的请求而拒绝您的请求,则响应将包含错误消息。

Task在这里发挥作用的唯一真实位置是机器实际收到响应和延续运行之间的时间。如果您收到大量响应,或者在线程池中有大量工作,则可能需要一些时间才能继续进行。