ниже LINQ заявление:Ошибка с Linq команды -Есть уже открытое DataReader, связанные с этой командой, которая должна быть закрыта первая
List<Column> columns = table.Columns.Cast<Column>().SelectMany(t => table.Columns.Cast<Column>().Where(col => col.DataType.Equals(DataType.NVarChar(4000))).Select(col => col)).ToList();
занимает около 5 секунд, чтобы выполнить, и для 500+ таблиц, это очень долгое время. Я решил пойти на параллельный цикл. Итак, этот процесс не дожидался завершения строения и обработки следующей итерации. Но получаю ошибку - Существует уже открытая DataReader, связанные с этой командой, которая должна быть закрыта первая
Ниже мой код -
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.DoWork += (_, args) =>
{
int count = 1;
foreach (Table table in DestinationTables)
{
Task.Factory.StartNew(() =>
{
Thread thread = new Thread(new ThreadStart(() =>
{
List<Column> columns = table.Columns.Cast<Column>().SelectMany(t => table.Columns.Cast<Column>().Where(col => col.DataType.Equals(DataType.NVarChar(4000))).Select(col => col)).ToList();
if (columns.Count > 0)
encryptedcolumns.Add(table.ToString(), columns);
Application.Current.Dispatcher.InvokeAsync(() =>
{
worker.ReportProgress(count++);
});
}));
thread.Start();
}).Wait();
}
};
worker.ProgressChanged += (_, args) =>
{
ProgressBarCurrentValue = args.ProgressPercentage;
NotificationText[1] = "Configuration In Progress. " + Math.Round(Convert.ToDouble(progressBarCurrentValue * 100/progressBarMaximumValue) , 2) + "% Completed";
};
worker.RunWorkerCompleted += (_, args) =>
{
NotificationText[1] = "Execution Started. Please wait";
NotifyPropertyChanged("NotificationText");
ExecuteWorker.RunWorkerAsync();
NotifyPropertyChanged("ExecuteWorker");
};
worker.RunWorkerAsync();
Если добавить параллельный Еогеасп и удалить все три потоки (фоновая работа, taskfactory и innewost Thread), затем система зависает, и я не получаю обновления на каждой итерации.
Если ответ, который я дал, решил проблему, пожалуйста, отметьте это как ответ. Спасибо ... –