【发布时间】:2010-11-25 13:59:15
【问题描述】:
我有一个程序,我需要在其中创建大量文件夹到外部共享点站点(外部意味着我不能使用共享点对象模型)。 Web 请求在这方面工作得很好,但一次只做一个(发送请求、等待响应、重复)相当慢。我决定对请求进行多线程处理,以尝试加快速度。程序已经大大加快了速度,但经过一段时间(1-2 分钟左右)后,开始抛出并发异常。
代码如下,这是最好的方法吗?
Semaphore Lock = new Semaphore(10, 10);
List<string> folderPathList = new List<string>();
//folderPathList populated
foreach (string folderPath in folderPathList)
{
Lock.WaitOne();
new Thread(delegate()
{
WebRequest request = WebRequest.Create(folderPath);
request.Credentials = DefaultCredentials;
request.Method = "MKCOL";
WebResponse response = request.GetResponse();
response.Close();
Lock.Release();
}).Start();
}
for(int i = 1;i <= 10;i++)
{
Lock.WaitOne();
}
例外情况类似于
未处理的异常:System.Net.WebException:无法连接到远程服务器 ---> System.Net.Sockets.SocketException:每个套接字地址通常只允许使用一次 192.0.0.1:81
在 System.Net.Sockets.Socket.DoConnect(端点 endPointSnapshot,SocketAddre
ss socketAddress)
在 System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
在 System.Net.ServicePoint.ConnectSocketInternal(布尔连接失败,Socket s4,Socket s6,Socket& 套接字,IPAddress& 地址,ConnectSocketState 状态,
IAsyncResult asyncResult, Int32 timeout, Exception&异常)
【问题讨论】:
-
您应该发布异常消息,以便这里的人可以帮助您
标签: c# multithreading webrequest