Есть такой вот метод
async Task<DataTable> TestAsync(string mySelectQuery, DB2Connection myConnection)
{
Task<DataTable> us = Task.Factory.StartNew(() =>
{
using (DB2Command myCommand = new DB2Command(mySelectQuery, myConnection))
{
using (DbDataReader myReader = myCommand.ExecuteReader())
{
DataTable dt = new DataTable();
dt.Load(myReader);
return dt;
}
}
});
return await us;
}
Вызываю так:
IEnumerable<Task<DataTable>> tasks = from unds in new [] { "select * from test1", "select * from test2" } select TestAsync(unds, myConnection);
DataTable[] uds = await Task.WhenAll(tasks);
И выдается исключение
Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints
Кто то может мне объяснить почему в этом случае DataTable
дает ошибку? он же локальный, а при асинхре ведь метод копируется и все его локальные переменные тоже?
А вот если сделать вот так, то ошибки нет!
lock (ob)
{
DataTable dt = new DataTable();
dt.Load(myReader);
return dt;
}
Класс DB2Connection
не предназначен для работы в двух потоках сразу. Вам надо создавать отдельное соединение на каждый запрос.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Делаю в Unity магнит - через PhysicsOverlap находим, ищем rigidbody и притягиваем к себеКод
В форме у меня есть следующий код
Делаю что-то вроде анкеты, в которой необходимо заполнить все поляКак сделать, чтобы по нажатию кнопки, если не заполнено какое либо поле,...
Как сделать так, чтобы в richtextbox соблюдались все абзацы, пробелы? А не просто сплошной текст(во 2 картинке текст был отформатирован через GUI Visual...