Последовательное выполнение потоков - C# (179279)

Узнай цену своей работы

Формулировка задачи:

Господа, очень нужна ваша помощь, бьюсь уже третий день... 1. Необходимо чтобы сперва выполнялся метод upload, а после него replace. Т.е. переносить файлы только тогда, когда они загружены на ftp-сервер. 2. Если выдает ошибку подключения типа: Timeout occurs или Transfering was timeout, то метод replace вообще не выполняем. Сейчас делаю так:
Листинг программы
  1. using BytesRoad.Net.Ftp;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9.  
  10. class sFTP
  11. {
  12. Mutex mutex = new Mutex();
  13. public static void upload()
  14. {
  15. try
  16. {
  17. sFTP sftp = new sFTP();
  18. sftp.mutex.WaitOne();
  19. FtpClient ftp = new FtpClient();
  20. ftp.PassiveMode = true;
  21. int TimeOUT = 1000;
  22. ftp.Connect(TimeOUT, "хост", 21);
  23. ftp.Login(TimeOUT, @"логин", "пароль");
  24. var dirLocal = new DirectoryInfo(@"путь");
  25. foreach (FileInfo file in dirLocal.GetFiles())
  26. {
  27. string fileName = Path.GetFileNameWithoutExtension(file.FullName) + Path.GetExtension(file.FullName);
  28. ftp.PutFile(TimeOUT, "путьнафтп" + fileName, @"локальныйпуть" + fileName);
  29. Console.WriteLine("Файл - " + fileName + " " + "загружен на FTP сервер");
  30. Thread.Sleep(100);
  31. }
  32. ftp.Disconnect(TimeOUT);
  33. sftp.mutex.ReleaseMutex();
  34. }
  35. catch (Exception ex)
  36. {
  37. Console.WriteLine(ex.Message);
  38. }
  39. }
  40. public static void replace()
  41. {
  42. try
  43. {
  44. sFTP sftp = new sFTP();
  45. sftp.mutex.WaitOne();
  46. var dir = new DirectoryInfo(@"локальныйпуть");
  47. if (dir.GetFiles().Length > 0)
  48. {
  49. foreach (FileInfo file in dir.GetFiles())
  50. {
  51. string fileName = Path.GetFileNameWithoutExtension(file.FullName) + Path.GetExtension(file.FullName);
  52. string spath = @"путь" + fileName; //Откуда перемещаем
  53. string dpath = @"путь" + fileName; //Куда перемещаем
  54. File.Move(spath, dpath);
  55. Console.WriteLine("Файл - " + fileName + " " + "перемещен");
  56. Thread.Sleep(100);
  57. }
  58. }
  59. sftp.mutex.ReleaseMutex();
  60. }
  61. catch (Exception ex)
  62. {
  63. Console.WriteLine(ex.Message);
  64. }
  65. }
  66. }
  67.  
  68. class Program
  69. {
  70. static void Main(string[] args)
  71. {
  72. try
  73. {
  74. Thread upload = new Thread(sFTP.upload);
  75. Thread replace = new Thread(sFTP.replace);
  76. upload.Start();
  77. replace.Start();
  78. }
  79. catch (Exception ex)
  80. {
  81. Console.WriteLine();
  82. }
  83. Console.ReadKey();
  84. }
  85. }
Будьте добры, укажите на мою ошибку

Решение задачи: «Последовательное выполнение потоков»

textual
Листинг программы
  1.        static void Main(string[] args)
  2.         {
  3.                 var upload = Task.Factory.StartNew(() => {
  4.                     upload();
  5.                 });
  6.  
  7.                 Task replace = upload.ContinueWith((antecedent) => {
  8.                     replace();
  9.                 });
  10.        }

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


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

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

13   голосов , оценка 4.231 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы