C# 当上一个调用仍在进行时,无法重新调用BeginGetRequestStream/BeginGetResponse

C# 当上一个调用仍在进行时,无法重新调用BeginGetRequestStream/BeginGetResponse,c#,multithreading,httpwebrequest,C#,Multithreading,Httpwebrequest,我在任务工厂内部调用httpwebresponse,执行1次后它抛出异常 无法在上一次调用仍在进行时重新调用BeginGetRequestStream/BeginGetResponse 我的代码如下: for (int i = 0; i < tsk.Length; i++) { tsk[i] = Task.Factory.StartNew((object obj) => { System.Diagnostics.Stopwatch watch =

我在任务工厂内部调用httpwebresponse,执行1次后它抛出异常
无法在上一次调用仍在进行时重新调用BeginGetRequestStream/BeginGetResponse

我的代码如下:

for (int i = 0; i < tsk.Length; i++) 
{ 
   tsk[i] = Task.Factory.StartNew((object obj) => 
   { 
        System.Diagnostics.Stopwatch watch = Stopwatch.StartNew();
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        watch.Stop(); 
   }, i);
}
for(int i=0;i
{ 
System.Diagnostics.Stopwatch watch=Stopwatch.StartNew();
HttpWebResponse=(HttpWebResponse)request.GetResponse();
看,停;
},i);
}

如何解决此问题

您反复使用相同的
HttpRequest
对象:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
您每次都必须重新创建它,因为单独的线程试图同时重新使用
HTTP
连接并获得异常:

HttpWebRequest request = WebRequest.Create("url");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

您反复使用相同的
HttpRequest
对象:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
您每次都必须重新创建它,因为单独的线程试图同时重新使用
HTTP
连接并获得异常:

HttpWebRequest request = WebRequest.Create("url");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();


您应该修复代码片段,以便我们能够看到您正在执行的操作。对于错误的格式,很抱歉,正确的代码是:for(int i=0;i{System.Diagnostics.Stopwatch watch=System.Diagnostics.Stopwatch.StartNew();HttpWebResponse响应=(HttpWebResponse)请求。HttpWebResponse响应=(HttpWebResponse)请求。GetResponse();watch.Stop();},i);您实际上想要实现什么?因为您的代码没有太多意义。我必须通过使用任务工厂对get方法进行并行调用以生成多个并行线程来对服务器进行压力测试。但是在第一次执行后,会引发异常“无法重新调用BeginGetRequestStream/BeginGetResponse,而上一个调用仍在进行中”我在WebClient上遇到了这个问题,我看到我正在下载一个url以“/”开头的文件。这对于浏览器很好,但对于WebClient则不行。因此,我添加了一个“http:“若要开始文本,则问题已解决!您应该修复代码段,以便我们能够看到您正在执行的操作。对于错误的格式,很抱歉,正确的代码是:for(int i=0;i{System.Diagnostics.Stopwatch watch=System.Diagnostics.Stopwatch.StartNew();HttpWebResponse响应=(HttpWebResponse)请求。HttpWebResponse响应=(HttpWebResponse)请求。GetResponse();watch.Stop();},i);您实际上想要实现什么?因为您的代码没有太多意义。我必须通过使用任务工厂对get方法进行并行调用以生成多个并行线程来对服务器进行压力测试。但是在第一次执行后,会引发异常“无法重新调用BeginGetRequestStream/BeginGetResponse,而上一个调用仍在进行中”我在WebClient上遇到了这个问题,我看到我正在下载一个url以“/”开头的文件。这对于浏览器很好,但对于WebClient则不行。因此,我添加了一个“http:“从文本开始,问题就解决了!我之所以这样做,是因为我需要在一个对所有线程都通用的公共位置设置请求属性,然后创建一个结构方法来重用此参数。您仍然需要创建尽可能多的线程数的实例。@VMAtm您能详细说明一下吗?”“创建结构方法以重用此参数"@saadasharif创建一些静态助手方法,其中包含一些必须应用于所有请求的规则。阅读一些有关设计模式的文献我这样做是因为我需要在一个公共位置设置请求属性,这对于所有线程都是通用的。然后创建一个fabric方法来重用此参数。您仍然需要创建尽可能多的参数实例的线程数是多少。@VMAtm能否请您详细说明“创建结构方法以重用此参数”@saadasharif创建一些静态辅助方法,其中包含一些必须应用于所有请求的规则。阅读一些有关设计模式的文献