ADO.NET DataTable в DataSet параллельный доступ и безопасность потоков - PullRequest
0 голосов
/ 11 января 2019

Я заполняю DataSet, который содержит несколько DataTables в настоящее время последовательно. Это немного медленно, хотя, я полагаю, частично из-за обходов (сети) с сервером, где большая часть времени выполнения вызвана задержкой в ​​сети.

Сейчас я рассматриваю просто выполнение всех запросов параллельно, чтобы ускорить процесс. Это безопасно, учитывая, что каждый поток работает со своим собственным DataTable внутри DataSet?

Были заданы похожие вопросы (например, здесь ), но, насколько мне известно, не в этой области, а обычно при параллельном доступе к DataTable, чего я не хочу делать, только несколько DataTable внутри DataSet.

Пример:

using (var newDs = new MyDataSet())
{
    newDs.EnforceConstraints = false;
    var tasks = new[]
    {
        System.Threading.Tasks.Task.Factory.StartNew(() => {
            new MyDataSetTableAAdapter().Fill(newDs.TableA);
        }),
        System.Threading.Tasks.Task.Factory.StartNew(() =>
        {
            new MyDataSetTableBAdapter().Fill(newDs.TableB);
        }),
        System.Threading.Tasks.Task.Factory.StartNew(() =>
        {
            new MyDataSetTableCAdapter().Fill(newDs.TableC);
        })
    };
    System.Threading.Tasks.Task.WaitAll(tasks);
    newDs.EnforceConstraints = true;
}

Я уже получил ошибку ограничения, вероятно, из-за отношений FK, когда явно не отключил EnforceConstraints.

Пока что в нескольких исполнениях код работает нормально.

На самом деле он работает на разумную сумму быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...