Я разрабатываю приложение для 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; }
});
}