У меня два потока, один использует SqlDataAdapter
для извлечения набора результатов из запросов к серверу SQL, другой обрабатывает данные, которые не нужно удалять, одновременно с набором данных.
Код:
//Thread 1
DataSet ds = new DataSet();
using (SqlDataAdapter sd = new SqlDataAdapter(cmd, sourceConn))
{
sd.Fill(ds);
}
//Thread 2 -- Execute after Fill() starts
//I might be deleting or modifying some rows(use Delete() not RemoveAt()), but also might be just reading ds
ds.Tables[0].AcceptChanges();
Результат выполнения иногда показывает ArgumentException
, говорящий, что индекс был вне диапазона при выполнении AcceptChanges()
, или IndexOutOfRangeException
При выполнении на ds.Tables[0].Rows[i].Delete()
или просто прочитал некоторую строку ith
(конечно, я ограничил i<= ds.Tables[0].Rows.Count - 1
). число строк исключений встречается при некотором случайном числе, но, вероятно, близко к более чем 80% от общего числа строк (например, всего 150 тыс., при 132 тыс.). Так в чем же дело, если я не выполняю процесс удаления?