Очень нужна помощь, подскажите пожалуйста, как сделать последовательное выполнение методов, сломал себе уже всю голову... Суть такая, есть метод Method_A
и Method_B
, они должны выполниться последовательно: сначала Method_A
затем Method_B
, причем если метод выдал ошибку, не выполнился, или возникли еще какие-либо проблемы, необходимо повторить выполнение метода. Очень надеюсь на Вашу помощь!
Метод А
static void download()
{
Console.WriteLine("Beginning to download results..");
FtpClient ftp = new FtpClient();
sFTP sftp = new sFTP();
ftp.PassiveMode = true;
int TimeOUT = 1000;
do
{
ftp.Connect(TimeOUT, "host", 21);
ftp.Login(TimeOUT, @"log", "pass");
}
while (ftp.IsConnected == false);
ftp.ChangeDirectory(TimeOUT, @"directory");
foreach (FtpItem item in ftp.GetDirectoryList(TimeOUT))
{
if (item.ItemType == FtpItemType.File && !System.IO.File.Exists(@"path" + item.Name))
{
ftp.GetFile(TimeOUT, @"path" + item.Name, @"path" + item.Name);
Console.WriteLine("Скачан файл - " + item.Name);
}
}
ftp.Disconnect(TimeOUT);
Console.WriteLine("The results have been downloaded");
}
Метод В
static void upload()
{
Console.WriteLine("Beginning to upload files to FTP-server..");
FtpClient ftp = new FtpClient();
sFTP sftp = new sFTP();
ftp.PassiveMode = true;
int TimeOUT = 1000;
do
{
ftp.Connect(TimeOUT, "host", 21);
ftp.Login(TimeOUT, @"log", "pass");
}
while (ftp.IsConnected);
var dirLocal = new DirectoryInfo(@"directory");и
foreach (FileInfo file in dirLocal.GetFiles())
{
string fileName = Path.GetFileNameWithoutExtension(file.FullName) + Path.GetExtension(file.FullName);
ftp.PutFile(TimeOUT, "path" + fileName, @"path" + fileName);
Console.WriteLine("Файл - " + fileName + " " + "загружен на FTP сервер");
string spath = @"path" + fileName;
string dpath = @"path" + fileName;
File.Move(spath, dpath);
Console.WriteLine("Файл - " + fileName + " " + "перемещен");
}
ftp.Disconnect(TimeOUT);
Console.WriteLine("The files have been uploaded to FTP server");
}
На самом деле, если смотреть на то, как Вы описали задачу, то потоки здесь действительно не при чём. Нужно просто в цикле выполнить несколько раз по очереди каждый метод. Дождавшись положительного результата выполнения, начать циклически выполнять второй метод. Если неудачным результатом выполнения метода считать возникшее в нём исключение, то можно решить задачу примерно так:
class Program
{
static void MethodA()
{
Console.WriteLine("Executing method A");
Thread.Sleep(1000);
//раскомментируйте для проверки
//throw new NotImplementedException("ERROR!");
Console.WriteLine("Method A executed");
}
static void MethodB()
{
Console.WriteLine("Executing method B");
Thread.Sleep(2000);
//раскомментируйте для проверки
//throw new NotImplementedException("ERROR!");
Console.WriteLine("Method B executed");
}
static void ExecudeMethodInLoop(Action method, String methodName)
{
Boolean success = false;
while(!success)
{
try
{
method.Invoke();
success = true;
}
catch (Exception ex)
{
Console.WriteLine($"Method {methodName} execution failed. Reason: {ex.Message}");
Console.WriteLine($"Method {methodName} execution restart...");
}
}
}
static void Main(string[] args)
{
ExecudeMethodInLoop(MethodA, "A");
ExecudeMethodInLoop(MethodB, "B");
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть форма с button и LabelПри нажатии на кнопку выполняется метод button1_Click:
Рассмотрел шаблон работы RabbitMQ(RPC) принцип работы описан тутКак я понял единственная возможность как то распараллелить обработку запросов...
Только начал изучать ООП на phpПоявилась необходимость создать класс для работы с файлами и архивами