gpt4 book ai didi

c# - 将 TransactionScope 传递给 Parallel.Invoke 创建的任务

转载 作者:行者123 更新时间:2023-11-30 12:34:24 24 4
gpt4 key购买 nike

我希望并行运行的 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();
}

TxJob1TxJob2 方法中,如果我只是在 DependentClones 上调用 Complete,它就会工作。但是,如果我从克隆中创建一个范围,我会得到一个 TransactionAbortedException:

void TxJob1(Transaction dt) {
using (var tx = new TransactionScope(dt)) {
Console.WriteLine(dtx.TransactionInformation.LocalIdentifier);
tx.Complete();
}
}

异常是由在 main 方法中调用 Complete 而不是在 TxJobs 中引发的。为什么会失败?

[edit] 如果我在 TxJobs 中的 DependentTransaction 上显式调用 Complete,那么它就可以工作。如果我不在 TxJobs 中的新 TransactionScope 上调用 Complete(触发回滚),则父事务失败。看起来我必须对两个 Transaction 对象调用 Complete。

最佳答案

看来我必须同时对从属克隆和 TransactionScope 调用 Complete。 MS 在他们的 sample code 中做同样的事情.

关于c# - 将 TransactionScope 传递给 Parallel.Invoke 创建的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7278807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com