Tasks и локальный DataTable

368
09 декабря 2016, 08:54

Есть такой вот метод

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; 
}
Answer 1

Класс DB2Connection не предназначен для работы в двух потоках сразу. Вам надо создавать отдельное соединение на каждый запрос.

READ ALSO
Магнит в Unity - как уменьшить количество GetComponent?

Магнит в Unity - как уменьшить количество GetComponent?

Делаю в Unity магнит - через PhysicsOverlap находим, ищем rigidbody и притягиваем к себеКод

563
Как улучшить глобальный хук на языке C# в Microsoft Visual Studio?

Как улучшить глобальный хук на языке C# в Microsoft Visual Studio?

В форме у меня есть следующий код

386
Как программно поставить указатель в TextBox?

Как программно поставить указатель в TextBox?

Делаю что-то вроде анкеты, в которой необходимо заполнить все поляКак сделать, чтобы по нажатию кнопки, если не заполнено какое либо поле,...

526
RichTextBox в C#

RichTextBox в C#

Как сделать так, чтобы в richtextbox соблюдались все абзацы, пробелы? А не просто сплошной текст(во 2 картинке текст был отформатирован через GUI Visual...

445