Ich möchte Ihre Hilfe bei der Implementierung von Multi-Threading in meinem C# -Programm suchen.C# Multi-Threading - Upload auf FTP-Server
Das Programm zielt darauf ab, 10.000 ++ Dateien auf einen FTP-Server hochzuladen. Ich plane mindestens ein Minimum von 10 Threads zu implementieren, um die Geschwindigkeit des Prozesses zu erhöhen.
Damit ist das die Codezeile, die ich habe:
I 10 Threads initialisiert:
public ThreadStart[] threadstart = new ThreadStart[10];
public Thread[] thread = new Thread[10];
Mein Plan ist, eine Datei zu einem Thread zugewiesen werden, wie folgt:
file 1 > thread 1
file 2 > thread 2
file 3 > thread 3
.
.
.
file 10 > thread 10
file 11 > thread 1
.
.
.
Und so habe ich folgendes:
foreach (string file in files)
{
loop++;
threadstart[loop] = new ThreadStart(() => ftp.uploadToFTP(uploadPath + @"/" + Path.GetFileName(file), file));
thread[loop] = new Thread(threadstart[loop]);
thread[loop].Start();
if (loop == 9)
{
loop = 0;
}
}
Die Übergabe von Dateien an die entsprechenden Threads funktioniert. Mein Problem ist, dass der Beginn des Threads sich überschneidet.
Ein Beispiel für Ausnahme ist, dass wenn Thread 1 ausgeführt wird, eine Datei an es übergeben wird. Es wird ein Fehler zurückgegeben, da Thread 1 noch nicht erfolgreich ausgeführt wurde und dann ein neuer Parameter an ihn übergeben wird. Trifft auch auf andere Threads zu.
Was ist der beste Weg, dies zu implementieren?
Jede Rückmeldung wird sehr geschätzt. Vielen Dank! :)
Sie die TPL nutzen könnten und lassen Sie die 'SynchronisationContext' die Menge an Themen behandeln Sie erstellen können .... –
... oder' TaskSchedular' .... –
Da dies ein netzwerkbezogenes Problem ist, sollten Sie mindestens 'async/await' für IOCP-Groovness verwenden. Viel besser als das Hochfahren von Threads, die bei einer Netzwerkoperation nur blockiert werden. Vielleicht möchten Sie sogar _TPL Dataflow_ zumindest solange berücksichtigen, bis Ihre Netzwerkbandbreite sich verflacht – MickyD