параллельное программирование и наборы данных с таблицами данных - PullRequest
0 голосов
/ 31 мая 2011

У меня есть приложение на основе задач, которое генерирует новые задачи для завершения обработки с использованием нескольких классов.Кажется, что все время от времени работает нормально с ошибками IOEXception.Последние ошибки связаны с использованием наборов данных и таблиц данных, когда в каждом запущенном процессе я обращаюсь к таблице базы данных, чтобы извлечь 100000 идентификаторов, которые я использую в своем процессе.При этом я добавляю набор данных в набор данных и использую его в другой части процесса.

При создании новой задачи я предполагал, что она создаст свой собственный набор данных и набор данных в памяти как новый процессвключает в себя новый экземпляр участвующих классов, и он должен быть потокобезопасным.Однако я получаю сообщение об ошибке: «Набор данных уже принадлежит этому набору данных»

Теперь после исследования я обнаружил, что нельзя создать несколько таблиц данных в одном наборе.Так есть ли что-нибудь вокруг этого или я должен рассмотреть другую структуру данных, например, использование списка?

Public class tprocess
....
 ....
   public shared dsCountry as new dataset
   public shared dstable as new datatable

  public shared sub main()

      do_processing()
 end sub

  public shared do_processing()

      try 
        dscountry.tables.add(dsTable)
        ...' sql steps to get data with sqldatareader

1 Ответ

0 голосов
/ 31 мая 2011

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

Это может быть сложно. Например, это будет использовать тот же экземпляр DataSet:

void Method() 
{
   DataSet ds = null;

   Task t1 = Task.Factory.StartNew(delegate {ds = new DataSet(); /*work with ds */});
   Task t2 = Task.Factory.StartNew(delegate {ds = new DataSet(); /*work with ds */});
}
...