1

我的理解是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在等待时被阻塞?

对此的任何见解或我如何使用调试器检查以确定在执行的给定点存在多少活动(打开)连接都会很棒。

基本上,我想知道它是否为我处理过,或者我是否必须特别考虑,以免我似乎在攻击服务器?

4

1 回答 1

1

这实际上并不特定于Task. 一旦您拨打电话,就会创建外部连接Task.Factory.FromAsync。正在执行的“任务”Task只是等待响应返回(而不是首先发送它)。因此,如果您的机器无法发送更多请求,调用BeginGetResponse将失败,并且如果服务器因为认为您正在淹没它们而拒绝您的请求,则响应将包含错误消息。

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

于 2012-10-17T15:02:26.567 回答