Я хочу, чтобы TxJobs
, работающие параллельно, создали область из этой родительской транзакции.Как мне сделать эту работу?
using (var tx = TransactionScope()) {
Parallel.Invoke(TxJob1, TxJob2) ;
tx.Complete();
}
Я передал DependentClone
:
using (var tx = new TransactionScope()) {
var dtx1 = Transaction.Current.DependentClone(
DependentCloneOption.RollbackIfNotComplete) ;
var dtx2 = Transaction.Current.DependentClone(
DependentCloneOption.RollbackIfNotComplete) ;
Parallel.Invoke(() => TxJob1(dtx1), () => TxJob2(dtx2)) ;
tx.Complete();
}
В методах TxJob1
и TxJob2
это работает, если я просто вызываю Complete
на DependentClones
.Однако, если я создаю область из клона, я получаю TransactionAbortedException
:
void TxJob1(Transaction dt) {
using (var tx = new TransactionScope(dt)) {
Console.WriteLine(dtx.TransactionInformation.LocalIdentifier);
tx.Complete();
}
}
Исключение возникает при вызове Complete
в основном методе, а не в TxJobs
.Почему это не удается?
[править] Если я явно вызову Complete для DependentTransaction в TxJobs, то это работает.Если я не вызываю Complete для нового TransactionScope в TxJobs (вызывая откат), родительская транзакция завершается неудачно.Похоже, мне нужно вызвать Complete для обоих объектов транзакции.