我的理解是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
在等待时被阻止?
对此的任何了解或我如何检查调试器以确定在执行的给定点存在多少活动(开放)连接将是很好的。
基本上,我想知道它是否为我处理,或者我是否需要特别考虑,以便我似乎不会攻击服务器?
答案 0 :(得分:1)
这并非真正针对Task
。一旦拨打Task.Factory.FromAsync
,即会创建外部连接。 Task
正在执行的“任务”只是等待响应返回(而不是首先发送它)。因此,如果您的计算机无法再发送任何请求,则对BeginGetResponse
的调用将失败,如果服务器因拒绝您的请求而拒绝您的请求,则响应将包含错误消息。
Task
在这里发挥作用的唯一真实位置是机器实际收到响应和延续运行之间的时间。如果您收到大量响应,或者在线程池中有大量工作,则可能需要一些时间才能继续进行。