Последовательное выполнение потоков - 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();
                });
       }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы