Последовательное выполнение потоков - C# (179279)
Формулировка задачи:
Господа, очень нужна ваша помощь, бьюсь уже третий день...
1. Необходимо чтобы сперва выполнялся метод upload, а после него replace. Т.е. переносить файлы только тогда, когда они загружены на ftp-сервер.
2. Если выдает ошибку подключения типа: Timeout occurs или Transfering was timeout, то метод replace вообще не выполняем.
Сейчас делаю так:
Будьте добры, укажите на мою ошибку
using BytesRoad.Net.Ftp; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; class sFTP { Mutex mutex = new Mutex(); public static void upload() { try { sFTP sftp = new sFTP(); sftp.mutex.WaitOne(); FtpClient ftp = new FtpClient(); ftp.PassiveMode = true; int TimeOUT = 1000; ftp.Connect(TimeOUT, "хост", 21); ftp.Login(TimeOUT, @"логин", "пароль"); var dirLocal = new DirectoryInfo(@"путь"); foreach (FileInfo file in dirLocal.GetFiles()) { string fileName = Path.GetFileNameWithoutExtension(file.FullName) + Path.GetExtension(file.FullName); ftp.PutFile(TimeOUT, "путьнафтп" + fileName, @"локальныйпуть" + fileName); Console.WriteLine("Файл - " + fileName + " " + "загружен на FTP сервер"); Thread.Sleep(100); } ftp.Disconnect(TimeOUT); sftp.mutex.ReleaseMutex(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } public static void replace() { try { sFTP sftp = new sFTP(); sftp.mutex.WaitOne(); var dir = new DirectoryInfo(@"локальныйпуть"); if (dir.GetFiles().Length > 0) { foreach (FileInfo file in dir.GetFiles()) { string fileName = Path.GetFileNameWithoutExtension(file.FullName) + Path.GetExtension(file.FullName); string spath = @"путь" + fileName; //Откуда перемещаем string dpath = @"путь" + fileName; //Куда перемещаем File.Move(spath, dpath); Console.WriteLine("Файл - " + fileName + " " + "перемещен"); Thread.Sleep(100); } } sftp.mutex.ReleaseMutex(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } class Program { static void Main(string[] args) { try { Thread upload = new Thread(sFTP.upload); Thread replace = new Thread(sFTP.replace); upload.Start(); replace.Start(); } catch (Exception ex) { Console.WriteLine(); } Console.ReadKey(); } }
Решение задачи: «Последовательное выполнение потоков»
textual
Листинг программы
static void Main(string[] args) { var upload = Task.Factory.StartNew(() => { upload(); }); Task replace = upload.ContinueWith((antecedent) => { replace(); }); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д