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