Как исправить мою задачу, которая изменяет статус столбца в SQL? - PullRequest
1 голос
/ 19 сентября 2019

Я разрабатываю приложение для Windows, которое читает все файлы из файлового каталога, берет его строки и записывает их в SQL.Я получаю первый файл, записанный 2 раза в SQL, когда я вызываю мой второй Task, который меняет status (status - это столбец, который меняет свое значение при выполнении определенной операции, например, я импортирую файл status=0, Я отправляю записи для оптимизации status=10), и я не вижу проблемы в коде.Когда я debug это пошагово, это работает хорошо?Кто-нибудь, кто видит проблему, за которую я слеп??

Здесь я оперирую с заданиями:

using BoxingMOSRobotics.MOS_PackOSDataSetTableAdapters;
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace BoxingMOSRobotics
{
    class Program
    {
        static Task PopulateSQLTask;
        static Task SendForOptimizationTask;
        static Task MoveToOptimizedTask;
        static Launcher launcher;
        static DirectoryInfo dirInfo = new DirectoryInfo($@"{Properties.Settings.Default.FileDirectory}");
        static IMPORT_PARTLISTTableAdapter PartListTableAdapter = new IMPORT_PARTLISTTableAdapter();


        static void Main(string[] args)
        {
            var autoEvent = new AutoResetEvent(false);
            var autoEvent1 = new AutoResetEvent(false);
            var autoEvent2 = new AutoResetEvent(false);

            launcher = new Launcher();
            PopulateSQLTask = Task.CompletedTask;
            SendForOptimizationTask = Task.CompletedTask;
            MoveToOptimizedTask = Task.CompletedTask;

            Timer timerPopulateSQL = new Timer(PopulateSQL, autoEvent, 0, 1000);
            Timer timerSendForOptimization = new Timer(SendingForOptimization, autoEvent1, 0, 1100);
            //Timer timerOptimized = new Timer(Optimized, autoEvent2, 0, 2000);

            Console.ReadKey();
        }

        private static void Optimized(object state)
        {
            if (MoveToOptimizedTask.IsCompleted)
            {
                MoveToOptimizedTask = new Task(new Action(() => launcher.PartMoveToOptimizedPartList(PartListTableAdapter)));
                MoveToOptimizedTask.Start();
            }
        }

        private async static void SendingForOptimization(object state)
        {
            if (SendForOptimizationTask.IsCompleted)
            {
                try
                {
                    SendForOptimizationTask = new Task(async () => await launcher.SendPartsForOptimizing());
                    SendForOptimizationTask.Start();

                }
                catch { }
            }
        }

        private async static void PopulateSQL(object state)
        {
            FileInfo[] fileInfo = dirInfo.GetFiles($"{Properties.Settings.Default.FileType}");
            if (PopulateSQLTask.IsCompleted)
            {

                if (fileInfo.Length > 0)
                {
                    PopulateSQLTask = new Task(new Action(async () => await launcher.PopulateSQL(fileInfo[0], dirInfo)));
                    PopulateSQLTask.Start();           
                }
            }

        }
    }
}

Метод, который изменяет статус:

  public async Task SendPartsForOptimizing()
    {
        PartListDataTable = new MOS_PackOSDataSet.IMPORT_PARTLISTDataTable();
        await Task.Run(() =>
        {
            try
            {
                if ((int)PartListTableAdapter.ChecksForAnyRecords() != 0)
                {
                    Parts.Clear();
                    string badgeName = (string)PartListTableAdapter.GetBadgeNameByStatus(Properties.Settings.Default.NotImportedFileStatus);
                    PartListTableAdapter.FillByBadgeName(PartListDataTable, badgeName);

                    foreach (var item in PartListDataTable.ToList())
                    {
                        AddPartToListMapping(item);
                    }
                    PartListTableAdapter.UpdateStatus(Properties.Settings.Default.ImportedFileStatus, badgeName, Properties.Settings.Default.NotImportedFileStatus);
                }
            }
            catch (Exception ex) { var msg = ex; }
        });
    }
...