Ich habe ein Programm, wo ich einige große Anzahl von Ordnern zu einer externen Sharepoint-Website (extern bedeutet, ich kann nicht das Sharepoint-Objektmodell verwenden) erstellen müssen. Web-Anforderungen funktionieren gut für diese, aber einfach tun sie eine zu einer Zeit (Anfrage senden, warten auf Antwort, wiederholen) ist ziemlich langsam. Ich beschloss, die Anfragen zu multithreaden, um zu versuchen, sie zu beschleunigen. Das Programm hat sich erheblich beschleunigt, aber nach einer gewissen Zeit (zwischen 1-2 Minuten oder so), Gleichzeitigkeit Ausnahmen beginnen immer ausgelöst.
Der Code steht unten, ist das der beste Weg, dies zu tun?
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();
}
Die Ausnahme ist etwas in der Art von
Unbehandelte Exception: System.Net.WebException: Verbindung zum entfernten Server kann nicht hergestellt werden ---> System.Net.Sockets.SocketException: Normalerweise ist nur eine Verwendung jeder Socket-Adresse erlaubt 192.0.0.1:81
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre ss socketAddress)
at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)