Dodawanie zakresu transakcji do równoległego
Mam pętlę wstawiającą rekordy do bazy danych (Firebird):
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
{
taskList.Add(Task.Factory.StartNew(() =>
{
Parallel.ForEach(objectList, c =>
{
DoInsert(c, id);
});
}));
scope.Complete()
}
Chciałbym możliwość wycofania tych wstawek jako wsadu, jeśli wkładka się nie powiedzie. Jednak podczas wykonywania wstawiania w pętli Parallel.Foreach zakres transakcji nie jest widoczny. Zakładam, że to dlatego, że pętla działa w innym wątku. Jeśli zrobię to jako wstawka szeregowa przy użyciu TransactionScope, wszystko działa.
Próbowałem użyć DependentTransaction, ale nie mogę uzyskać kontekstu do funkcji DoInsert. DoInsert po prostu otwiera połączenie i zapisuje zawartość C do bazy danych.
Jakieś pomysły?
Dzięki,